SaveDialog => Datei mit Filter-Dateindung speichern
-
Und ich würde noch checken, ob der Benutzer nicht schon eine Dateiendung angegeben hat. "bla.txt.txt" ist ja meist nicht erwünscht
-
Hallo
Und genau dashalb habe ich ja ChangeFileExt vorgeschlagen.
bis bald
akari
-
Ich programmiere noch nicht sehr lange, also:
Warum OpenDialog::FilterIndex?
Wie sieht das bei meinem beispiel konkret aus? ich kriegs nicht hin, hab das versucht:... { try {SaveDialogText->Execute(); RichEdit1->Lines->SaveToFile(SaveDialogText->FileName); ChangeFileExt(SaveDialogText->FileName , SaveDialogText->FilterIndex); } catch (...) {Application->MessageBoxA("Datei wurde nicht gespeichert!","Achtung",0+16); } }
geht aber nicht
-
allein über die Tatsache, dass du erst speicherst und dann den Pfad + Endung änderst, solltest du mal nachdenken
greetz KN4CK3R
-
KN4CK3R schrieb:
allein über die Tatsache, dass du erst speicherst und dann den Pfad + Endung änderst, solltest du mal nachdenken
greetz KN4CK3R
Hinzu komm noch, dass er den Dialog vorher ohne Wirkung öffnet und schliesst.
Mach mal so:
if (SaveDialog->Execute()) { . // Dateiname etc festlegen . // SaveToFile }
mfg
kpeter
-
ChangeFileExt sollte in dem Fall eher nicht verwenden, sondern vor dem Speichern den Wert von DefaultExt neu setzen, denn ansonsten nimmt man dem Nutzer jede Möglichkeit im Filter nicht vorhandene Dateiendungen anzugeben
-
@KN4CK3R: Wie gesagt, ich programmiere noch nicht lange, aber andersrum gehts ja auch nicht
@kpeter: das hat so auch schon funktioniert, das mach ich erst wenn des andere alles funktioniert. trotzdem danke für den tipp!@Linnea: sowas in der art?:
try { SaveDialogText->Execute(); switch (SaveDialogText->FilterIndex) { case 1: SaveDialogText->DefaultExt = "txt"; break; case 2: SaveDialogText->DefaultExt = "rtf"; break; } RichEdit1->Lines->SaveToFile(SaveDialogText->FileName); } ...
geht aber so auch nicht
-
im Prinzip ja, aber kpeters Vorschlag solltest du umbedingt beachten, denn sonst wird die Datei auch gespeichert, wenn der Nutzer den Dialog abbricht
-
Ok, hier nicht die beste lösung, aber so gehts auf jeden Fall.
{ try { if (SaveDialogText->Execute()) { switch (SaveDialogText->FilterIndex) { case 1: SaveDialogText->DefaultExt = "ctx"; break; case 2: SaveDialogText->DefaultExt = "txt"; break; case 3: SaveDialogText->DefaultExt = "rtf"; break; case 4: SaveDialogText->DefaultExt = ""; //Eigene Dateiendung break; } RichEdit1->Lines->SaveToFile(SaveDialogText->FileName); } } catch (...) {Application->MessageBoxA("Datei wurde nicht gespeichert!","Achtung",0+16); } }
Hier muss man halt, wenn man eine eigene dateiendung angeben will, den entsprechenden filter wählen.
-
Chris_ schrieb:
Hier muss man halt, wenn man eine eigene dateiendung angeben will, den entsprechenden filter wählen.
wieso das denn? Wenn der Nutzer im SaveDialog z.B. den Filter für Txt auswählt, im FileName aber test.csv eingibt, dann wird das auch als test.csv gespeichert.
Das ist doch grad der Sinn von DefaultExt: die Dateiendung wird nur angehängt wenn der Nutzer keine Dateiendung angegeben hat.{ try { if (SaveDialogText->Execute()) { switch (SaveDialogText->FilterIndex) { case 1: SaveDialogText->DefaultExt = "ctx"; break; case 2: SaveDialogText->DefaultExt = "txt"; break; case 3: SaveDialogText->DefaultExt = "rtf"; break; default: SaveDialogText->DefaultExt = "txt"; //für den Fall, dass ein allgemeiner filter wie *.* angegeben wurde break; } RichEdit1->Lines->SaveToFile(SaveDialogText->FileName); } } catch (...) { Application->MessageBoxA("Datei wurde nicht gespeichert!","Achtung",0+16); } }
hierbei ist allerdings wichtig, dass schon zur Entwurfszeit bei DefaultExt ein Wert (z.B. der Gleiche wie bei default, s.o.) enthalten ist, sonst speichert er irgendwie immer ohne Endung...
noch ein Tipp: rück deinen Quellcode bitte etwas ein, dann ist er viel einfacher zu lesen
-
Vielen Dank @Linnea
Sorry, ich dachte, dass DefaultExt immer angehängt wird!
das mit dem einrücken werde ich ab jetzt beherzigen, wie gesagt, ich programmiere noch nicht sehr lange.