Frage zum Abspeichern mit FileSaveDialog

  • Hi,
    ich würde gerne einen Text ein einem Editorfenster per FileSave Dialog als *.txt Datei abspeichern können, sobald ein MenuItem "Save" gedrückt wird. Die Dateien sollen immer im selben Ordner abgespeichert werden, dh man muss ihn nicht auswählen können. Ich bin noch Anfänger und verstehe daher die Funktion nicht richtig, könnte mir sie jemand erklären, und/oder mit Beispiel Quelltext helfen?

    Vg,

    RapIT

  • Naja, hab ich schon gesehen...Im Grunde genommen versteh ich ja das Prinziep, aber ich weiß nicht wie ich es auf meine Problemstellung anwenden kann...

    Was soll zum Beispiel dieser Zahlencode?

    Code
    $MyDocsFolder = "::{450D8FBA-AD25-11D0-98A8-0800361B1103}"

    Das soll wohl der Code von einem Pfad oder Ordner sein, aber wie kann ich ihn herausfinden...

    Vg,

    RapIT

  • Das soll wohl der Code von einem Pfad oder Ordner sein, aber wie kann ich ihn herausfinden...

    Die findest du in der Registry:
    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace

    Suche: {04731B67-D933-450a-90E6-4ACD2E9408FE}
    Systemsteuerung (Classic): {21EC2020-3AEA-1069-A2DD-08002B30309D}
    usw. ^^

  • Es funktioniert ja auch, dass sich dabei der FileSaveDialog öffnet, und wenn man dann einen Namen wählt und auf speichern drückt, sagt er welchen Pfad man gewählt hat...Ist ja auch logisch, steht ja so im Programm. Aber wie bekomme ich es hin, dass er dann wirklich am Speicherort eine TXT datei erstellt und den Inhalt des Edit-Fensters hineinschreibt?

    • Offizieller Beitrag

    Aber wie bekomme ich es hin, dass er dann wirklich am Speicherort eine TXT datei erstellt und den Inhalt des Edit-Fensters hineinschreibt?

    Der FileSaveDialog gibt dir Pfad\Dateinamen zurück unter dem die Datei gespeichert werden soll.
    Also:

    [autoit]

    ; Pfad festlegen
    $path = FileSaveDialog(...)
    ; Inhalt lesen und speichern
    $inhalt = GUICtrlRead($edit)
    $fh = FileOpen($path, 1) ; zum Schreiben öffnen
    FileWrite($fh, $inhalt)
    FileClose($fh)

    [/autoit]
  • Ok, danke erstmal leider kann ich das jetzt gerade nicht ausprobieren weil das Programm einfach nicht funktioniert...Ichhabe eigentlich nichts daran gemacht außer die par Zeilen einzufügen und anzupassen...Aber wie ich das sehe wird doch bei diesem Code keine TXT datei angelegt sondern nur der Save-Ordner und dann soll das Programm diese Datei dort mit dem Inhalt des Edit-Fensters beschreiben...Aber ich möchte eine völlig neue Datei erstellen.

    Danke, ich denke mal das hat mir schon sehr geholfen wie gesagt ich kann es wegen einem Error den ich nicht verstehe nicht ausprobieren...Ich poste hier mal den Teil der nicht klappt, vielleicht kann mir jemand sagen wieso nicht, obwohl es eig nicht hierher gehört ;)

    [autoit]


    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>

    [/autoit][autoit][/autoit][autoit]

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("PC-Timer", 625, 445, 192, 124)
    $MenuItem1 = GUICtrlCreateMenu("Datei")
    $MenuItem2 = GUICtrlCreateMenuItem("Drucken", $MenuItem1)
    $MenuItem3 = GUICtrlCreateMenuItem("Speichern", $MenuItem1)
    $Button1 = GUICtrlCreateButton("OK", 550, 30, 50, 50)
    $input = GUICtrlCreateEdit("", 96, 16, 424, 100)

    [/autoit][autoit][/autoit][autoit]

    $output = GUICtrlCreateEdit("", 96, 140, 424, 250, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_READONLY,$ES_WANTRETURN,$WS_HSCROLL,$WS_VSCROLL))

    [/autoit][autoit][/autoit][autoit]

    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit][autoit][/autoit][autoit]

    While 1
    $nMsg = GUIGetMsg()


    Switch $nMsg

    Case $GUI_EVENT_CLOSE
    Exit

    [/autoit][autoit][/autoit][autoit]

    Case $MenuItem1

    Case $MenuItem2
    $file = GUICtrlRead($input)

    [/autoit][autoit][/autoit][autoit]

    $print = _FilePrint($file)

    [/autoit][autoit][/autoit][autoit]

    If $print Then
    MsgBox(0, "Drucken ", "Die Datei wurde gedruckt. ")
    Else
    MsgBox(0, "Drucken ", "Fehler: " & @error & @CRLF & "Die Datei wurde nicht gedruckt. ")
    EndIf
    Case $MenuItem3

    $MyDocsFolder = "::{450D8FBA-AD25-11D0-98A8-0800361B1103}"

    $var = FileSaveDialog( "Wählen sie einen Namen!", $MyDocsFolder, "Textdokumente (*.ini;*.txt)", 2)
    $inhalt = GUICtrlRead($input)

    $fh = FileOpen($var, 1) ; zum Schreiben öffnen
    FileWrite($fh, $inhalt)
    FileClose($fh)

    If @error Then
    MsgBox(4096,"","Speichern abgebrochen.")


    Case $Button1

    [/autoit][autoit][/autoit][autoit]

    GUICtrlSetData($output, GUICtrlRead($input) & @CRLF, "1")
    GUICtrlSetData($input, "")
    GUICtrlSetState($input,$GUI_FOCUS)

    EndSwitch

    WEnd

    [/autoit][autoit][/autoit][autoit][/autoit]

    Da kommt folgender Error:

    >"C:\Program Files\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "C:\Users\raphael\Desktop\PC-Timer\editor123.au3"
    C:\Users\raphael\Desktop\PC-Timer\editor123.au3 (69) : ==> "Case" statement with no matching "Select"or "Switch" statement.:
    Case $Button1

    >Exit code: 1 Time: 0.211


    Aber wieso...Mal abgesehen vom Quellcode, ich mein da ist doch ein Switch Statement und auch ein ENDSWITCH...
    Wo soll da das Problem sein?

    Vg,

    RapIT


    PS: Stand da bei dir nicht gerade noch ein anderer Quellcode?