Seite 1 von 2

Probleme mit SaveFileRequester() und CheckFileName()

Verfasst: 13.08.2009 17:35
von Mok
Servus!

Ehrlich gesagt hätte ich nicht gedacht, dass mir die zwei Probleme wiederfahren, da ich eigentlich schon eine Zeit progge und es irgendwie nur an der Logik hapern kann... :shock:

1.) Ich möchte, dass der SaveFileRequester() so lange aufgerufen wird, bis keine unerlaubten Zeichen mehr im Dateinamen sind. --GELÖST--
Das ist 'n Klacks... das hab ich mir auch gedacht und nun sitz ich schon seit ner halben Stunde an den 8 Zeilen Code...

Code: Alles auswählen

[...]
            NameOK = 0
            While NameOK = 0
              SaveExportFile$ =  SaveFileRequester("Exportierte Datei speichern...","C:\","Text-Dokument (*.txt)|*.txt|Internet-Verknüpfung (*.url)|*.url|Alle Dateien|*.*",0)
              NameOK = CheckFilename(SaveExportFile$)
              If NameOK = 0
                MessageBox_(#Null,"Der Dateiname ist ungültig! Möglicherweise enthält"+Chr(13)+"er eines der folgenden Zeichen:"+Chr(13)+" \ / : * ? "+#DQUOTE$+" < > |","Ungültiger Name",#MB_OK|#MB_ICONERROR|#MB_SYSTEMMODAL)
              EndIf
            Wend
[...]
Was mache ich denn falsch? Die MessageBox kommt, wenn der Name OK ist und komischerweise auch wenn man auf "Abbrechen" klickt.

2.) Der Benutzer speichert eine Datei. Mithilfe von CreateFile() und WriteXYZ() kann ich die Datei erstellen und in die Datei schreiben. Blöd nur, dass bei CreateFile() der ExtensionPart nicht mitgeschreiben wird.
Bei dem Standard-Beispiel für SaveFileRequester() wird die Dateierweiterung in die Ergebnisvariable dazu geschrieben... aber bei mir nicht :?

Snippet:

Code: Alles auswählen

SaveExportFile$ =  SaveFileRequester("Exportierte Datei speichern...","C:\","Text-Dokument (*.txt)|*.txt|Internet-Verknüpfung (*.url)|*.url|Alle Dateien|*.*",0)
Debug SaveExportFile$
Bei dem Snippet wird dann BeispielDatei ausgegeben, statt BeispielDatei.txt

Hab mir nicht gedacht dass ich nach so kurzer Zeit PB verlerne :|
MfG, Mok

Re: Probleme mit SaveFileRequester() und CheckFileName()

Verfasst: 13.08.2009 17:46
von Kiffi
Mok hat geschrieben:Die MessageBox kommt, wenn der Name OK ist und komischerweise auch wenn man auf "Abbrechen" klickt.
wie sieht denn CheckFilename() aus?

Grüße ... Kiffi

Verfasst: 13.08.2009 17:56
von Mok
CheckFileName() is ne Funze von PB 4.3
PureBasic-Hilfe hat geschrieben: Syntax:
Ergebnis = CheckFilename(Dateiname$)

Beschreibung:
Überprüft, dass der angegebene 'Dateiname$' keine für das Dateisystem ungültige Zeichen enthält. Zum Beispiel sind unter Windows die '/' und '\' Zeichen nicht in einem Dateinamen erlaubt. Ist der 'Dateiname$' korrekt, wird 1 zurückgegeben, andernfalls 0.

Der 'Dateiname$' darf nicht den Pfad mit enthalten.


Unterstützte OS:

Alle

Verfasst: 13.08.2009 18:59
von jojo1541
PureBasic-Hilfe hat geschrieben: Der 'Dateiname$' darf nicht den Pfad mit enthalten.
Der Savefilerequester gibt den gesamten Pfad aus.
Du musst den Pfad vor CheckFileName löschen, damit 1 herauskommt.

und wenn du auf abbrechen drückst, macht PB nichts anderes, als einfach den Code weiter runterzurattern, nur dass dein String für die Datei leer bleibt, was auch kein gültiger windows-Dateiname ist.

Verfasst: 13.08.2009 19:04
von Mok
Danke, jojo!
Jetzt bleibt nur noch das Problem mit der FileExtension

Verfasst: 13.08.2009 19:51
von jojo1541
tut er bei mir im Beispiel auch nicht, sobald ich die Endung der zu speichernden Datei lösche.

Verfasst: 13.08.2009 20:06
von Kiffi
Mok hat geschrieben:CheckFileName() is ne Funze von PB 4.3
oje! Habe ich noch nie benutzt. :lol:
Mok hat geschrieben:Jetzt bleibt nur noch das Problem mit der FileExtension
SelectedFilePattern() abfragen und mit GetExtensionPart() SaveExportFile$
prüfen. Wenn die Extension nicht da ist, dann die entsprechende Extension
selber dranhängen.

SelectedFilePattern()... Habe ich auch noch nie benutzt...

Grüße ... Kiffi

Verfasst: 13.08.2009 20:31
von Mok
Aber was mich verwirrt ist, dass bei dem Beispielcode die Extension im String (in meinem Fall SaveExportFile$) mitgespeichert wird :shock:

Verfasst: 13.08.2009 20:37
von Kiffi
Mok hat geschrieben:Aber was mich verwirrt ist, dass bei dem Beispielcode die Extension im String (in meinem Fall SaveExportFile$) mitgespeichert wird :shock:
bei mir nicht.

Grüße ... Kiffi

Verfasst: 13.08.2009 20:40
von Mok
Jetzt pack ich garnix mehr.

Warum gibt folgender Code

Code: Alles auswählen

  StandardFile$ = "C:\autoexec.bat"   ; anfänglichen Pfad + Dateiname festlegen
  ; Mit dem nächsten String werden die Pattern (mit "|" als Trennzeichen) für anzuzeigende
  ; Dateitypen festgelegt:
  ;  Erster:  "Text (*.txt)" als Name, ".txt" und ".bat" als erlaubte Dateiendungen
  ;  Zweiter: "PureBasic (*.pb)" als Name, ".pb" al erlaubte Dateiendung
  ;  Dritter: "Alle Dateien (*.*) als Name, "*.*" als erlaubte Dateiendung, gültig für alle Dateien
  Pattern$ = "Text (*.txt)|*.txt;*.bat|PureBasic (*.pb)|*.pb|Alle Dateien (*.*)|*.*"
  Pattern = 0    ; wir verwenden den ersten von drei möglichen Pattern als Standard
  File$ = SaveFileRequester("Bitte Datei zum Speichern auswählen", StandardFile$, Pattern$, Pattern)
  If File$
    MessageRequester("Information", "Sie haben folgende Datei ausgewählt:"+Chr(10)+File$, 0)
  Else
    MessageRequester("Information", "Der Requester wurde abgebrochen.", 0) 
  EndIf
bei mir aus "Sie haben folgende Datei ausgewählt:    C:\test.txt" und bei dir nur "C:\test"? :?