Probleme mit SaveFileRequester() und CheckFileName()

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Probleme mit SaveFileRequester() und CheckFileName()

Beitrag 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
Zuletzt geändert von Mok am 13.08.2009 19:03, insgesamt 1-mal geändert.
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Probleme mit SaveFileRequester() und CheckFileName()

Beitrag 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
a²+b²=mc²
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Beitrag 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
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Benutzeravatar
jojo1541
Beiträge: 431
Registriert: 15.09.2007 17:12
Wohnort: Irgendwo im Nirgendwo

Beitrag 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.
Ich verkaufe Rechtschreibfehler und jede menge GROßBUCHSTABEN. Alles unbegrenzt zu haben.
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Beitrag von Mok »

Danke, jojo!
Jetzt bleibt nur noch das Problem mit der FileExtension
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Benutzeravatar
jojo1541
Beiträge: 431
Registriert: 15.09.2007 17:12
Wohnort: Irgendwo im Nirgendwo

Beitrag von jojo1541 »

tut er bei mir im Beispiel auch nicht, sobald ich die Endung der zu speichernden Datei lösche.
Ich verkaufe Rechtschreibfehler und jede menge GROßBUCHSTABEN. Alles unbegrenzt zu haben.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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
a²+b²=mc²
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Beitrag von Mok »

Aber was mich verwirrt ist, dass bei dem Beispielcode die Extension im String (in meinem Fall SaveExportFile$) mitgespeichert wird :shock:
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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
a²+b²=mc²
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Beitrag 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"? :?
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Antworten