FileSaveDialog Problem

  • Hallo :)

    Ich hab da ein paar Schwierigkeiten mit FileSaveDialog. Hab mich in der Autoit Hilfe und im Google
    schlau gemacht aber versteh einiges noch nicht.

    Ich habe Probeme es mit FileSaveDialog so hinzubekommen das wenn die Datei vorhanden ist dann die Frage beim Überschreiben einer Datei kommt.

    [autoit]

    $save = FileSaveDialog("Save File", @DesktopDir, "Config(*.cfg)", "", $isrvname)

    [/autoit]


    Hab dann nach Filter mit 16 versucht ging aber nur wenn ich $isrvname entfernt habe.

    [autoit]

    $save = FileSaveDialog("Save File", @DesktopDir, "Config(*.cfg)", 16, $isrvname)

    [/autoit]


    Funktioniert aber nur wenn ich $isrvname entferne.

    [autoit]

    $save = FileSaveDialog("Save File", @DesktopDir, "Config(*.cfg)", 16)

    [/autoit]


    Aber $isrvname brauche ich denn damit schreibe ich den Namen der Datei(Servers) direkt rein, aslo so dass der User nur noch die Datei am richtigen Ort speichern muss.

    Aslo habe ich eine andere Möglichkeit gesucht und habe es dann so hinbekommen

    Spoiler anzeigen
    [autoit]

    Func SaveSettings()
    $exist = GUICtrlRead($Input5)
    $isrvname = GUICtrlRead($Input1)
    $ctext = GUICtrlRead($Edit1)
    $save = FileSaveDialog("Save File", @DesktopDir, "Config(*.cfg)", "", $isrvname)
    ;~ If $save <> ".cfg" Then $save &= ".cfg"
    If @error Then Return 0
    If StringRight($save, 4) <> ".cfg" Then $save &= ".cfg"
    If Not FileExists($exist) Then
    FileWrite($save, $ctext)
    Else
    FileDelete($exist)
    FileWrite($save, $ctext)
    EndIf
    GUICtrlSetData($Input5, $save)
    EndFunc ;==>SaveSettings

    [/autoit]


    Ist das richtig so oder gibt es da eine andere Möglichkeit?
    Der Code funktioniert, nur erscheint es mir zu umständig.

    5 Mal editiert, zuletzt von VinceA (26. Mai 2013 um 16:24)

  • Hab nochmal alles probiert aber so wie es aussieht funktioniert bei FileSaveDialog die options nicht mit default name zusammen.

    Ist das ein Bug oder liegt es am Betriebssystem?


  • Ist das ein Bug oder liegt es am Betriebssystem?


    Welches BS hast du überhaupt? ... :whistling:

    MfG

    There's a joke that C has the speed and efficieny of assembly language combined with readability of....assembly language. In other words, it's just a glorified assembly language. - Teh Interwebz

    C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, you blow off your whole leg. - Bjarne Stroustrup
    Genie zu sein, bedeutet für mich, alles zu tun, was ich will. - Klaus Kinski

  • Kann dein Problem nicht wirklich nachvollziehen. Bei mir kommt die Abfrage immer dann wenn im Zielverzeichnis die Datei vorhanden ist und das 16er Flag verwendet wird. Wie schaut denn deine Variable $isrvname aus?

    Grundsätzlich zeigt der Dialog das Verzeichnis an, welches als "init dir" gewählt wurde (bei dir der Desktop). Sofern man einen "defaultname" angibt, welcher lediglich den Dateinamen beinhaltet ist dies ebenfalls so. Enthält der defaultname hingegen einen kompletten Dateipfad wird dieses Verzeichnis im Dialog angezeigt. Vielleicht liegt ja hier dein Problem? Ich könnte mir vorstellen, dass du UNC Pfade verwendest, also sowas hier "\\servername\pfad". Da ich das hier nicht testen kann, kann ich aber nix dazu sagen ob es dann zu Problemen kommt.

    Wie gesagt, sobald die Datei im Verzeichnis das auch angezeigt wird existiert kommt auch die Meldung bei gesetztem Flag 16.

  • Mit der Variable $isrvname wird ein Name ausgelesen den der User in $Input1 schreibt, also kein Pfad.
    16er Flag funktioniert bei mir aber nur ohne $isrvname
    Es ist egal ob ich es so benutze

    [autoit]

    $save = FileSaveDialog("Save File", @DesktopDir, "Config(*.cfg)", 16, "TEST")

    [/autoit]


    oder so

    [autoit]

    $save = FileSaveDialog("Save File", @DesktopDir, "Config(*.cfg)", 16, $isrvname)

    [/autoit]


    Der Dialog öffnet sich, der Name wird eingefügt aber es kommt kein Hinweis dass die Datei vorhanden ist und ob sie überschrieben werden soll.
    Wenn die Datei vorhanden ist wird einfach alles in die .cfg File geschrieben so habe ich alles doppelt drin.

  • [autoit]

    $save = FileSaveDialog("Save File", @DesktopDir, "Config(*.cfg)", 16, "TEST")

    [/autoit]


    Dir ist aber schon klar, dass die Dateiendung mit angegeben werden muss?

    also so:

    [autoit]

    $save = FileSaveDialog("Save File", @DesktopDir, "Config(*.cfg)", 16, "TEST.cfg")

    [/autoit]


    Falls du das nur bei deinem Beispiel vergessen hast, endschuldige ich mich für meine "Erbsenzählerei"... :D

  • Zum einen das, zum anderen wird die Warnmeldung alleine trotzdem nicht dein Problem lösen, denn wenn der Anwender "ja" sagt, dann musst du nachher trotzdem noch verhindern, dass der Text an die existierende Datei angehängt wird, sofern das von deiner Seite unerwünscht ist. Die Warnmeldung selbst hat also keinerlei Auswirkungen auf die mögliche fatale Entscheidung des Anwenders. Sie warnt den Anwender nur, verhindern kann sie nichts. Die Lösung deines eigentlichen Problems, siehe unten...

    [autoit]


    Func SaveSettings()
    $exist = GUICtrlRead($Input5) ; <-- nur zum testen????????????
    $isrvname = GUICtrlRead($Input1)
    $ctext = GUICtrlRead($Edit1)
    $save = FileSaveDialog("Save File", @DesktopDir, "Config(*.cfg)", 16, $isrvname)
    If @error Then Return 0
    If StringRight($save, 4) <> ".cfg" Then $save &= ".cfg"
    $hSave = fileopen($save,2+8) ; öffnet Datei im (Über-)Schreibmodus, wenn sie nicht existiert wird sie mit Verzeichnisstruktur angelegt, andernfalls mit neuem Inhalt überschrieben
    FileWrite($hsave, $ctext)
    fileclose($hsave)
    GUICtrlSetData($Input5, $save)
    EndFunc ;==>SaveSettings

    [/autoit]

  • Dir ist aber schon klar, dass die Dateiendung mit angegeben werden muss?

    also so:

    [autoit]

    $save = FileSaveDialog("Save File", @DesktopDir, "Config(*.cfg)", 16, "TEST.cfg")

    [/autoit]

    Nein wusste ich nicht hab auch nirgends was drüber gelesen auch nicht in der Hilfe oder ich muss es übersehen haben.

    Zum einen das, zum anderen wird die Warnmeldung alleine trotzdem nicht dein Problem lösen, denn wenn der Anwender "ja" sagt, dann musst du nachher trotzdem noch verhindern, dass der Text an die existierende Datei angehängt wird, sofern das von deiner Seite unerwünscht ist. Die Warnmeldung selbst hat also keinerlei Auswirkungen auf die mögliche fatale Entscheidung des Anwenders. Sie warnt den Anwender nur, verhindern kann sie nichts. Die Lösung deines eigentlichen Problems, siehe unten...

    Das wusste ich auch nicht, steht auch leider nichts in der Hilfe darüber. Ich bin bis jetzt immer davon ausgegangen das die Datei ersetzt wird.

    $hSave = fileopen($save,2+8 ) ; öffnet Datei im (Über-)Schreibmodus, wenn sie nicht existiert wird sie mit Verzeichnisstruktur angelegt, andernfalls mit neuem Inhalt überschrieben

    Hab jetzt einiges dazugelernt.

    Der Code funktiontert jetzt genau so wie ich es wollte.

    [autoit]

    Func SaveSettings()
    $isrvname = GUICtrlRead($Input1)
    $ctext = GUICtrlRead($Edit1)
    $save = FileSaveDialog("Save File", @UserProfileDir, "Config(*.cfg)", 16, $isrvname & ".cfg")
    If @error Then Return 0
    If StringRight($save, 4) <> ".cfg" Then $save &= ".cfg"
    $hSave = FileOpen($save, 2 + 8)
    FileWrite($hSave, $ctext)
    FileClose($hSave)
    GUICtrlSetData($Input5, $save)
    EndFunc ;==>SaveSettings

    [/autoit]

    misterspeed und Friesel danke für eure Tips und Hilfe :)

    Einmal editiert, zuletzt von VinceA (26. Mai 2013 um 16:22)

  • Da es ja nun funktioniert, setze bitte den Präfix des Threads auf gelöst (1. Beitrag bearbeiten)

    MfG

    There's a joke that C has the speed and efficieny of assembly language combined with readability of....assembly language. In other words, it's just a glorified assembly language. - Teh Interwebz

    C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, you blow off your whole leg. - Bjarne Stroustrup
    Genie zu sein, bedeutet für mich, alles zu tun, was ich will. - Klaus Kinski