Seite 1 von 2

write File to Directory inkl. Drag and Drop Files ?

Verfasst: 16.05.2016 20:34
von udg
So, nun sitz ich weiter an meinem Kopiertool

Ich erstelle meine Ordner dort, wo sich auch meine Tool exe befindet, durch:

Code: Alles auswählen

;////////////////////////////////////
; ERSTELLE ORDNER MIT UNTERORDNER
;////////////////////////////////////
Procedure CreateDirectoryAll(dir.s)
  Protected result.l, dir_sub.s, dir_total.s, count.l
 
  count = 1
  dir_sub = StringField(dir, count, "\")
  dir_total = dir_sub + "\"
 
  While dir_sub <> ""
    result.l = CreateDirectory(dir_total)
   
    count + 1
    dir_sub = StringField(dir, count, "\")
    dir_total + dir_sub + "\"
  Wend
  ProcedureReturn result
EndProcedure
und in der Schleife unter meinem Button:

Code: Alles auswählen

Case #Btn_MakeDir
            CreateDirectoryAll(GetPathPart(ProgramFilename()) + GetGadgetText(#EingabeFeld_Name2) + "\" + GetGadgetText(#EingabeFeld_Name))
klappt und geht wunderbar.
jetzt möchte ich aus meinem Tool heraus, Dateien in beide erstellte Unterordner speichern.

ich habe mir eine Prozedur geschrieben:

Code: Alles auswählen

; EXTRACT FILES
Procedure WriteToTempDir()
  temp$ = (GetPathPart(ProgramFilename())+ GetGadgetText(#EingabeFeld_Name2) + "\" + GetGadgetText(#EingabeFeld_Name)) ; falsch
          Unterstuetze_Extract(temp$+"SUPPORT.txt")
          Unterstuetze_Extract(temp$+"MEINE ARBEIT.txt")
EndProcedure
Mein Button ruft die Prozedur:

Code: Alles auswählen

WriteToTempDir()
auf. Verzeichnisse werden nun erstellt.

Ich möchte, dass die beiden Dateien jeweils in die 2 Unterordner geschrieben werden.

mit

Code: Alles auswählen

temp$ = (GetPathPart(ProgramFilename())+ GetGadgetText(#EingabeFeld_Name2) + "\" + GetGadgetText(#EingabeFeld_Name)) ; falsch
gehts zu mindest dass die beiden Dateien in den ersten Unterordner geschrieben werden aber das Tool hängt noch die Namen der Unterordner mit in die Dateinamen weil ja: "+ GetGadgetText(#EingabeFeld_Name2)" ... die Namen mit übernimmt und der 2. Unterordner bleibt leer.

Wie muss ich hier vorgehen?

Danke Euch

Re: write File to Directory

Verfasst: 17.05.2016 07:58
von mhs
Schlicht und einfach so?

Code: Alles auswählen

Unterstuetze_Extract(temp$+"\SUPPORT.txt")
Unterstuetze_Extract(temp$+"\MEINE ARBEIT.txt")
Sorry, aber deine Frage verstehe ich nicht so richtig...

Aber mal was anderes, wenn du nur "temporäre" Dateien erstellen möchtest, warum verwendest du dann nicht GetTemporaryDirectory() als Pfad, sondern den Pfad der Exe? Das ist eigentlich ganz schlechter Stil, dein Programm hat z.B. unter "C:\Programme" keine Schreibrechte mehr, wenn es dort installiert wird. Ausnahme wäre vielleicht ein Tool, das vom USB Stick ausgeführt wird, wie z.B. eine Portable App.

Re: write File to Directory

Verfasst: 17.05.2016 16:21
von udg
Na dann versuche ich doch mal Licht Bild ins Dunkel zu bringen.

Das Tool was ich mir programmiere, ist nur für meinen Gebrauch. Schreibrechte habe ich natürlich immer und Überall.
Die Dateien die ich kopieren möchte sollen nicht in die

Code: Alles auswählen

temp$ = GetTemporaryDirectory()
dort nützen die mir nix.

Ich erstelle mit meinem Tool - 2 Cutom Ordner welche ich in 2 StringGatget's vorher mit Namen vershen kann und diese sollen immer dort erstellt werden wo sich auch meine Tool exe befindet. Durch die Zeile:

Code: Alles auswählen

CreateDirectoryAll(GetPathPart(ProgramFilename()) + GetGadgetText(#EingabeFeld_Name2) + "\" + GetGadgetText(#EingabeFeld_Name))
wird das auch erledigt, so wie ich es haben möchte (danke an RSBasic fürs helfen)

Jetzt soll die Kopierfunktion sich so verhalten, dass die 3 Dateien (2txt Info Dateien und eine Web-Verknüpfung) ebnfalls automatisch einmal in den ersten erstellten Ordner und einmal in den 2ten erstellten Unterordner kopiert werden. (nicht an dem Platz wo sich die Tool exe befindet, nur in die Ordner)
Ordner1 --> textDatei1.txt und textDatei2.txt und Web Verknüpfung
und
Unterordner2 --> textDatei1.txt und textDatei2.txt und Web Verknüpfung

Mit

Code: Alles auswählen

Unterstuetze_Extract(temp$+"SUPPORT ME.txt")
Unterstuetze_Extract(temp$+"UNTERSTUETZT MEINE ARBEIT.txt")
komme ich hier nicht weiter. Denn ich muss der Procedure erst einmal klar machen dass sie berücksichtigt, es sind 2 Ordner vorhanden wo die beiden TXT Dateien und die Web-Verknüpfung rein sollen.

Um das ganze zu sehen wo es die Ordner und 3 Dateien erstellt, besser als Exe kompilieren und diese starten. Denn Die Ordner werden ja nur erstellt wenn die exe vorhanden ist:

Code: Alles auswählen

CreateDirectoryAll(GetPathPart(ProgramFilename())...
Zum testen den Button "Verzeichnis anlegen" klicken.

Zum Veranschaulichen hier das Gerippe. Code angepasst:

Code: Alles auswählen

Enumeration
  #Window_0
  #EingabeFeld_Name
  #EingabeFeld_Name2
  #Btn_Erstellen
  #container2
  #Font_Btn_Erstellen
  #TargetFiles
  #SourceFiles
  #EingabeFeld_Name_Font
  #EingabeFeld_Name_Font2
  #Btn_MakeDir
  #Font_Btn_MakeDir
  #container
  #Infobar
  #Infobar_Font
  #Gadget_exit
  #Exit_btn
  #Btn_Minimize
  #Gadget_Minimize
  #Line_Shadow
  #Gadget_Line_Shadow
EndEnumeration
DataSection


;{ Suppot_Me TxT Datei
   Suppot_Me: 
   ;{Size = 18 bytes
    Data.l $70707553,$2074726F,$74736574,$74616420
    Data.b $65,$69
   Suppot_Me_End:
;}
;{ Unterstuetze TxT Datei
   Unterstuetze: 
   ;{Size = 22 bytes
    Data.l $4E49454D,$52412045,$54494542,$73657420,$65542074
    Data.b $78,$74
   Unterstuetze_End:
;}
EndDataSection

; Load Suppot_Me TxT Datei into Mem
Procedure Suppot_Me_Extract(fileName.s)
    If CreateFile(1, fileName)      ; create file
       L1 = ?Suppot_Me_End - ?Suppot_Me ; get size of included binary
       WriteData(1, ?Suppot_Me, L1)   ; write included binary to file
       CloseFile(1)                 ; close file
    Else
       MessageRequester("Error", "Schreibfehler! Keine Schreibrechte auf C:?", 0)
    EndIf
  ProcedureReturn 1
EndProcedure

; Load Unterstuetze TxT Datei into Mem
Procedure Unterstuetze_Extract(fileName.s)
    If CreateFile(2, fileName)          ; create file
       L2 = ?Unterstuetze_End - ?Unterstuetze ; get size of included binary
       WriteData(2, ?Unterstuetze, L2)     ; write included binary to file
       CloseFile(2)                     ; close file
    Else
       MessageRequester("Error", "Schreibfehler! Keine Schreibrechte auf C:?", 0)
    EndIf
  ProcedureReturn 1
EndProcedure

; EXTRACT TEXT DATEIEN
Procedure WriteToDir(dir.s)
  
          Suppot_Me_Extract(dir + "SUPPORT ME.txt")
          Unterstuetze_Extract(dir + "MEINE ARBEIT.txt")
          
         ;erstelle Web Verknuepfung 
          If CreateFile(0, dir + "google.de.url")
             WriteStringN(0, "[{000214A0-0000-0000-C000-000000000046}]")
             WriteStringN(0, "Prop3=19,2")
             WriteStringN(0, "[InternetShortcut]")
             WriteStringN(0, "URL=http://www.google.de/")
             WriteStringN(0, "IDList=")
             CloseFile(0)
             Else
             MessageRequester("Information","Konnte Datei nicht erstellen!")
         EndIf
EndProcedure

;//////////////////////////////////// 
; DEFINIERE EXIT BUTTON BILD
;//////////////////////////////////// 
      CreateImage(#Exit_btn,30,30)
       StartDrawing(ImageOutput(#Exit_btn))
       FillArea(1,1,-1,RGB(55, 110, 133))
       Line(6,23,18,-18,$FFFFFF)
       Line(6,6,18,18,$FFFFFF)
      StopDrawing()
;//////////////////////////////////// 
; DEFINIERE MINIMIEREN BUTTON
;////////////////////////////////////
      CreateImage(#Btn_Minimize,30,30)
       StartDrawing(ImageOutput(#Btn_Minimize))
       FillArea(1,1,-1,RGB(55, 110, 133))
       Line(6,23,18,1,$FFFFFF)
       StopDrawing()
;//////////////////////////////////// 
; SCHATTEN
;////////////////////////////////////
      CreateImage(#Line_Shadow,498,1,32,RGB(0, 39, 91))
       StartDrawing(ImageOutput(#Line_Shadow))
       StopDrawing() 
;//////////////////////////////////// 
; DEFINIERE START UP EFFEKT, FADE IN
;////////////////////////////////////
#AW_BLEND = $80000    ;programmstart Einblenden
       
Define.l Event, EventWindow, EventGadget, EventType, EventMenu

;//////////////////////////////////// 
; FESTLEGEN, TEXT VERTICAL ALIGN IN EINGABEFELD
;////////////////////////////////////
Procedure StringGadgetVCenter(GadgetID)
   hwndEdit = GadgetID(GadgetID)
   
   LineCount = SendMessage_(hwndEdit,#EM_GETLINECOUNT, 0, 0)

   hdc = GetDC_(hwndEdit)
   SelectObject_(hdc,GetGadgetFont(GadgetID))
   GetTextExtentPoint32_(hdc,"ABC",3,fsz.SIZE)
   ReleaseDC_(hwndEdit,hdc)   
   
   GetClientRect_(hwndEdit,eRect.RECT)
   eRect\top = (GadgetHeight(GadgetID) - fsz\cy * LineCount) / 2
   eRect\bottom = eRect\top + (fsz\cy * LineCount) + 4
   
   If eRect\bottom < GadgetHeight(GadgetID)
      SendMessage_(hwndEdit,#EM_SETRECT,0,eRect)
   EndIf
EndProcedure

Procedure OpenWindow_Window_0()
    OpenWindow(#Window_0, 502, 158, 500, 610, "", #PB_Window_BorderLess|#PB_Window_ScreenCentered|#WS_VISIBLE)
    ; FENSTER FARBE
      SetWindowColor(#Window_0, RGB(109, 145, 160))
    ; FOKUS AUF TOOL SETZEN
      SetActiveWindow(#Window_0)
;//////////////////////////////////// 
; TOOL TITEL INFOBAR
;////////////////////////////////////
      TextGadget(#Infobar,WindowWidth(#Window_0)-499, 1, 438, 30, "  < >  FastRel v1",#SS_CENTERIMAGE)
      SetGadgetFont(#Infobar, LoadFont(#Infobar_Font, "Microsoft Sans Serif", 10, #PB_Font_HighQuality))
      SetGadgetColor(#Infobar , #PB_Gadget_BackColor, RGB(55, 110, 133))  ;TEXT Background Color
      SetGadgetColor(#Infobar , #PB_Gadget_FrontColor, RGB(180, 199, 224));TEXT Color
;//////////////////////////////////// 
; EXIT BUTTON POSITIONIEREN
;////////////////////////////////////
      ImageGadget(#Gadget_exit,WindowWidth(0)-31,1,30,30,ImageID(#Exit_btn))
;//////////////////////////////////// 
; MINIMIZE BUTTON POSITIONIEREN
;////////////////////////////////////
      ImageGadget(#Gadget_Minimize,WindowWidth(0)-61,1,30,30,ImageID(#Btn_Minimize))
;//////////////////////////////////// 
; SCHATTEN POSITIONIEREN
;////////////////////////////////////
      ImageGadget(#Gadget_Line_Shadow,1,31,498,1,ImageID(#Line_Shadow))
;////////////////////////////////////
; EINGABEFELD FÜR Unter-ORDNER NAME
;////////////////////////////////////
      StringGadget(#EingabeFeld_Name, 30, 60, 440, 35," Unter Ordner Original Name eingeben",#PB_String_BorderLess | #ES_MULTILINE);
      SetGadgetFont(#EingabeFeld_Name, LoadFont(#EingabeFeld_Name_Font, "Microsoft Sans Serif", 10, #PB_Font_HighQuality))
      StringGadgetVCenter(#EingabeFeld_Name)
      SetGadgetColor(#EingabeFeld_Name , #PB_Gadget_BackColor, RGB(183, 201, 209))
      SetGadgetColor(#EingabeFeld_Name , #PB_Gadget_FrontColor, RGB(17, 80, 108))
;////////////////////////////////////
; EINGABEFELD 2 FÜR ORDNER NAME
;////////////////////////////////////
      StringGadget(#EingabeFeld_Name2, 30, 105, 440, 35," Neuen Ordner Name eingeben",#PB_String_BorderLess | #ES_MULTILINE);
      SetGadgetFont(#EingabeFeld_Name2, LoadFont(#EingabeFeld_Name_Font2, "Microsoft Sans Serif", 10, #PB_Font_HighQuality))
      StringGadgetVCenter(#EingabeFeld_Name2)
      SetGadgetColor(#EingabeFeld_Name2 , #PB_Gadget_BackColor, RGB(183, 201, 209))
      SetGadgetColor(#EingabeFeld_Name2 , #PB_Gadget_FrontColor, RGB(17, 80, 108))
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\     
; 1px RAHMEN UM DEN BUTTON: ORDNER ERSTELLEN
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
      TextGadget(#container,96, 519, 307, 67,"")
      SetGadgetColor(#container, #PB_Gadget_BackColor, RGB(183, 201, 209));TEXT Background Color
;////////////////////////////////////
; BUTTON ORDNER ERSTELLEN
;////////////////////////////////////
      TextGadget(#Btn_MakeDir, 97, 520, 305, 65, "erstellen",#SS_CENTERIMAGE|#SS_NOTIFY|#SS_CENTER) 
      SetGadgetFont(#Btn_MakeDir, LoadFont(#Font_Btn_MakeDir, "Microsoft Sans Serif", 12, #PB_Font_HighQuality)) ; Button Font
      SetGadgetColor(#Btn_MakeDir, #PB_Gadget_BackColor, RGB(109, 145, 160))    ;TEXT Background Color
      SetGadgetColor(#Btn_MakeDir, #PB_Gadget_FrontColor, RGB(183, 201, 209));TEXT Color
;////////////////////////////////////
; ERSTELL ZIEL FÜR DRAG & DROP DATEIEN
;////////////////////////////////////
      ListIconGadget(#TargetFiles, 29, 170, 443, 330, "Dateien hier einfügen, die verschoben werden sollen", 280)
      SetGadgetColor(#TargetFiles , #PB_Gadget_BackColor, RGB(55, 110, 133)) ;TEXT Background Color
      SetGadgetColor(#TargetFiles , #PB_Gadget_FrontColor, RGB(248, 248, 248));TEXT Color
;////////////////////////////////////
; DRAG & DROP ZIEL FREIGESCHALTEN
;////////////////////////////////////
      EnableGadgetDrop(#TargetFiles, #PB_Drop_Files, #PB_Drag_Copy)
  ;EndIf
EndProcedure
;////////////////////////////////////
; ERSTELLE ORDNER MIT UNTERORDNER
;////////////////////////////////////
Procedure CreateDirectoryAll(dir.s)
  Protected result.l, dir_sub.s, dir_total.s, count.l
 
  count = 1
  dir_sub = StringField(dir, count, "\")
  dir_total = dir_sub + "\"
 
  While dir_sub <> ""
    result.l = CreateDirectory(dir_total)
   
    count + 1
    dir_sub = StringField(dir, count, "\")
    dir_total + dir_sub + "\"
  Wend
  ProcedureReturn result
EndProcedure



OpenWindow_Window_0()
;////////////////////////////////////
; TOOL START UP EFFEKT
;////////////////////////////////////
AnimateWindow_(WindowID(0),500,#AW_BLEND)

Repeat
  Event = WaitWindowEvent()
  EventGadget = EventGadget()
  EventType = EventType()   
 
  If Event = #PB_Event_Gadget
    Select EventGadget()
;////////////////////////////////////  
;- EINGABEFELD auto SELECT ON FOCUS
;//////////////////////////////////// 
      Case #EingabeFeld_Name
           ;Auto select on Focus
            If EventType() = #PB_EventType_Focus
               SendMessage_(GadgetID(EventGadget()), #EM_SETSEL, Len(GetGadgetText(EventGadget())), 0)
             EndIf
;////////////////////////////////////  
;- EINGABEFELD 2 auto SELECT ON FOCUS
;//////////////////////////////////// 
      Case #EingabeFeld_Name2
           ;Auto select on Focus
            If EventType() = #PB_EventType_Focus
               SendMessage_(GadgetID(EventGadget()), #EM_SETSEL, Len(GetGadgetText(EventGadget())), 0)
             EndIf
;////////////////////////////////////  
;- ERSTELL ORDNER AUS EINGABE FELDERN
;////////////////////////////////////           
      Case #Btn_MakeDir
     
            Define.s Dir1, Dir2, Filename
            Define.i i
       
            Dir1 = GetPathPart(ProgramFilename()) + GetGadgetText(#EingabeFeld_Name2) + "\"
            Dir2 = Dir1 + GetGadgetText(#EingabeFeld_Name) + "\" ; Unterordner
       
            CreateDirectoryAll(Dir2)

            ;////////////////////////////////////   
            ;- EXTRACT FILES
            ;////////////////////////////////////
            WriteToDir(Dir1)
            WriteToDir(Dir2)
           
           
;/////////////////////////////////////////////////////////////////////
;
;- LESE DATEN AUS Drag n Drop Feld und verschiebe in Unterordner
;  Unterordner: Dir2 = Dir1 + GetGadgetText(#EingabeFeld_Name) + "\"
;
;/////////////////////////////////////////////////////////////////////
           
            For i = 0 To CountGadgetItems(#TargetFiles) - 1
              Filename = GetGadgetItemText(#TargetFiles, i)
              RenameFile(Filename, Dir2 + GetFilePart(Filename))
            Next i
           
            ClearGadgetItems(#TargetFiles)
           
;/////////////////////////////////////////////////////////////////////
           
            SetGadgetText(#EingabeFeld_Name," Ordner wurde erstellt")
            SetGadgetText(#EingabeFeld_Name2," Unter-Ordner wurde erstellt")
           
;////////////////////////////////////  
;- EXIT BUTTON FUNCTION
;////////////////////////////////////
      Case #Gadget_exit
           End
;////////////////////////////////////  
;- MINIMIZE BUTTON FUNCTION
;////////////////////////////////////
      Case #Gadget_Minimize
            If EventType = #PB_EventType_LeftClick
              SetWindowState(#Window_0, #PB_Window_Minimize)
            EndIf
            
    EndSelect       
  EndIf
;////////////////////////////////////  
;- DRAG WINDOW MIT MAUS
;////////////////////////////////////
  Select Event
      Case #WM_LBUTTONDOWN    
            SendMessage_(WindowID(#Window_0), #WM_NCLBUTTONDOWN, #HTCAPTION, 0)    
  EndSelect    
;////////////////////////////////////////////////////////////////////////   
;- DRAG & DROP START EVENT on the source gadgets, initiate a drag & drop
;////////////////////////////////////////////////////////////////////////
  If Event = #PB_Event_Gadget And EventType() = #PB_EventType_DragStart
      Select EventGadget()
        Case #SourceFiles
          Files$ = ""       
          For i = 0 To CountGadgetItems(#SourceFiles)-1
            If GetGadgetItemState(#SourceFiles, i) & #PB_Explorer_Selected
              Files$ + GetGadgetText(#SourceFiles) + GetGadgetItemText(#SourceFiles, i) + Chr(10)
            EndIf
          Next i 
          If Files$ <> ""
            DragFiles(Files$)
          EndIf
      EndSelect
;////////////////////////////////////////////////////////////////////////
;- DRAG & DROP START EVENT on the target gadgets, receive the dropped data
;////////////////////////////////////////////////////////////////////////
      ElseIf Event = #PB_Event_GadgetDrop
        Select EventGadget()
          Case #TargetFiles
                Files$ = EventDropFiles()
                Count  = CountString(Files$, Chr(10)) + 1
                For i = 1 To Count
                  AddGadgetItem(#TargetFiles, -1, StringField(Files$, i, Chr(10)))
                Next i  
        EndSelect  
  EndIf       
Until Event = #PB_Event_CloseWindow:End

Ich hoffe es ist verständlich und möge man nachsichtig sein. Ich bin mi Lernprozess.

Re: write File to Directory

Verfasst: 17.05.2016 17:23
von Sicro
Auf die Schnelle würde ich es so machen:

Code: Alles auswählen

CompilerSelect #PB_Compiler_OS
  CompilerCase #PB_OS_Windows
    #Slash = "\"
  CompilerDefault ; Linux und Mac
    #Slash = "/"
CompilerEndSelect

Path$ = GetPathPart(ProgramFilename()) + "EingabeFeld_Name2" + #Slash + "EingabeFeld_Name"
Path$ = RTrim(Path$, #Slash) ; Evtl. Schrägstrich am Ende vom Pfad entfernen

; Ordner1 --> textDatei1.txt und textDatei2.txt und Web Verknüpfung
Ordner1$ = Left(Path$, Len(Path$) - FindString(ReverseString(Path$), #Slash))
Debug Ordner1$

; Unterordner2 --> textDatei1.txt und textDatei2.txt und Web Verknüpfung
Unterordner2$ = Path$
Debug Unterordner2$
Oder mit einer Schleife:

Code: Alles auswählen

Path$ = GetPathPart(ProgramFilename()) + "EingabeFeld_Name2" + #Slash + "EingabeFeld_Name"

; Sicherstellen, dass der Pfad ein Schrägstrich am Ende hat
If Right(Path$, 1) <> #Slash
  Path$ + #Slash
EndIf

NewPath$ = ""
CountOfSlashes = CountString(Path$, #Slash)
For i = 1 To CountOfSlashes
  NewPath$ + StringField(Path$, i, #Slash) + #Slash
Next
Debug NewPath$

NewPath$ = ""
CountOfSlashes = CountString(Path$, #Slash)
For i = 1 To CountOfSlashes - 1
  NewPath$ + StringField(Path$, i, #Slash) + #Slash
Next
Debug NewPath$

Re: write File to Directory

Verfasst: 17.05.2016 17:56
von mhs
Da gibt es viele Möglichkeiten, eine z.B. wäre:

Code: Alles auswählen

      Case #Btn_MakeDir
      
            Define.s Dir1, Dir2
            
            Dir1 = GetPathPart(ProgramFilename()) + GetGadgetText(#EingabeFeld_Name2) + "\"
            Dir2 = Dir1 + GetGadgetText(#EingabeFeld_Name) + "\"
      
            CreateDirectoryAll(Dir2)

            ;////////////////////////////////////   
            ;- EXTRACT FILES
            ;////////////////////////////////////
            WriteToDir(Dir1)
            WriteToDir(Dir2)
           
            SetGadgetText(#EingabeFeld_Name," Ordner wurde erstellt")
            SetGadgetText(#EingabeFeld_Name2," Unter-Ordner wurde erstellt")

Code: Alles auswählen

; EXTRACT TEXT DATEIEN
Procedure WriteToDir(dir.s)
   
    Unterstuetze_Extract(dir + "SUPPORT ME.txt")
    Unterstuetze_Extract(dir + "MEINE ARBEIT.txt")
   
   ;erstelle Web Verknuepfung
    If CreateFile(0, dir + "google.de.url")
       WriteStringN(0, "[{000214A0-0000-0000-C000-000000000046}]")
       WriteStringN(0, "Prop3=19,2")
       WriteStringN(0, "[InternetShortcut]")
       WriteStringN(0, "URL=http://www.google.de/")
       WriteStringN(0, "IDList=")
       CloseFile(0)
       Else
       MessageRequester("Information","Konnte Datei nicht erstellen!")
   EndIf
  
EndProcedure

Re: write File to Directory

Verfasst: 17.05.2016 19:52
von udg
@ Sicro
vielen Dank für dein Beispiel und genau so dick an MHS

Ich habe die Methode von MHS genommen. Diese sollte ich problemlos auch an meinen Drag and Drop Feld anwenden können. Hoffe ich.

Nochmals :allright:

Re: write File to Directory

Verfasst: 17.05.2016 23:44
von udg
So einfach wie ich mir das nun vorgestellt habe ist es mir dann doch nicht umzusetzen, dass meine Dateien aus dem Drag and Drop Feld beim Klick auf den Button "Verzeichnis anlegen" nun in meinen 2ten Unterordner verschoben werden.

Das ganze soll mein kleines Datei verschiebe Tool werden.

Nach ewig langem lesen und probieren und suchen komme ich nicht wirklich weiter.

Ich muss die "Files$" nun auslesen und verschieben.
Kann mir jemand dabei behilflich sein?

Ich denke, dass schon der Ansatz falsch ist? Angepasster Code oben:

Zeile 281

Code: Alles auswählen

;/////////////////////////////////////////////////////////////////////
;
;- LESE DATEN AUS Drag n Drop Feld und verschiebe in Unterordner
;  Unterordner: Dir2 = Dir1 + GetGadgetText(#EingabeFeld_Name) + "\"
;
;/////////////////////////////////////////////////////////////////////
            
            Files$ + GetGadgetText(#TargetFiles) + GetGadgetItemText(#TargetFiles, i) + Chr(10)            

Re: write File to Directory inkl. Drag and Drop Files ?

Verfasst: 18.05.2016 08:31
von mhs
Das ist recht einfach:

Code: Alles auswählen

      Case #Btn_MakeDir
      
            Define.s Dir1, Dir2, Filename
            Define.i i
       
            Dir1 = GetPathPart(ProgramFilename()) + GetGadgetText(#EingabeFeld_Name2) + "\"
            Dir2 = Dir1 + GetGadgetText(#EingabeFeld_Name) + "\" ; Unterordner
       
            CreateDirectoryAll(Dir2)

            ;////////////////////////////////////   
            ;- EXTRACT FILES
            ;////////////////////////////////////
            WriteToDir(Dir1)
            WriteToDir(Dir2)
           
           
;/////////////////////////////////////////////////////////////////////
;
;- LESE DATEN AUS Drag n Drop Feld und verschiebe in Unterordner
;  Unterordner: Dir2 = Dir1 + GetGadgetText(#EingabeFeld_Name) + "\"
;
;/////////////////////////////////////////////////////////////////////
           
            For i = 0 To CountGadgetItems(#TargetFiles) - 1
              Filename = GetGadgetItemText(#TargetFiles, i)
              RenameFile(Filename, Dir2 + GetFilePart(Filename))
            Next i
           
            ClearGadgetItems(#TargetFiles)
            
;/////////////////////////////////////////////////////////////////////
           
            SetGadgetText(#EingabeFeld_Name," Ordner wurde erstellt")
            SetGadgetText(#EingabeFeld_Name2," Unter-Ordner wurde erstellt")
Ich versuchs dir zu erklären... zuerst einmal die Zeile

Code: Alles auswählen

CreateDirectoryAll(GetPathPart(ProgramFilename()) + GetGadgetText(#EingabeFeld_Name2) + "\" + GetGadgetText(#EingabeFeld_Name))
kannst du dir sparen, weil das die Zeile

Code: Alles auswählen

CreateDirectoryAll(Dir2)
übernimmt, die erstellt alle notwendigen Über- und Unterordner für den vollständigen Pfad automatisch.

Nun zum eingentlichen Problem: In deinem ListIcon sind alle Dateipfade eingetragen (durch Drag & Drop), also musst du alle Zeilen des ListIcon nacheinander durchgehen. Das passiert mit der For Schleife von 0 bis "CountGadgetItems(#TargetFiles) - 1". Die -1, da wir bereits bei 0 mit dem Zählen beginnen und CountGagdetItems uns die Anzahl der Einträge liefert. Mit dem Zählerindex i und der Funktion "GetGadgetItemText(#TargetFiles, i)" holen wir uns den Eintrag jeder Zeile und verschieben die Datei mittels RenameFile in das Dir2. Dort müssen wir nur den Dateinamen (z.B. "abc.txt"), den uns die Funktion GetFilePart() liefert, an den Pfad Dir2 anhängen.

Re: write File to Directory inkl. Drag and Drop Files ?

Verfasst: 18.05.2016 15:23
von udg
EDIT:
Kompletten Code oben angepasst
mhs hat geschrieben:Zitat:
Das ist recht einfach
ja gut wenn man es so sieht :) , nein im Ernst, für mich sind das noch Welten. Ich habe zwar, abgeleitet von deinem Beispiel alles irgendwie in meinem Code stehen gehabt, aber nicht richtig und schon gar nicht im korrekten Zusammenhang. Im Kopf baut man sich eine Logik aber weiß diese nicht umzusetzen.
Da muss ich noch weiter lernen.

Ich versuche es zu erklären,
"Für i welches den Zähler initiiert in Relation zu "zähle alle Dateien" aus dem Drag and Drop Feld "TargetFiles" beginnend bei -1, weil wir Datei NULL schon brauchen, da ansonsten Datei 1 weggelassen würde wenn wir bei 1 anfangen zu zählen."

Warum muss das eigtl. so sein, das 1 höher ist als 0? Null Dateien sind doch keine Dateien, und 1 Datei ist 1 Datei. Kann ich das belesen?

"RenameFile ersetzt den Befehl, Verschiebe, wenn sie im Zielordner nicht vorhanden sind (sonst funktioniert dieser Befehl nicht?). Filename deklariert die Dateien welche nach Order Dir2 (Unterordner) verschoben werden sollen, GetFilePart (nimm jede einzelne Datei) und arbeite sie nach "i" dem Zähler ab."

Hab ich das richtig verstanden?
Ich bin dir sehr dankebar für deine Hilfe, überlege noch mit einzubauen, dass man den Zielordner der nun alle darin befindlichen Dateien enthält, mit Winrar packen lässt um Platz sparen zu können

Darf ich diesbezüglich bei Fragen noch einmal Meldung machen?

Bis hier hin. erstmal ein ganz großes Danke. Möchte mich gern revanchieren.

grüße

Re: write File to Directory inkl. Drag and Drop Files ?

Verfasst: 18.05.2016 16:07
von mhs
udg hat geschrieben:Warum muss das eigtl. so sein, das 1 höher ist als 0? Null Dateien sind doch keine Dateien, und 1 Datei ist 1 Datei. Kann ich das belesen?
Die Einträge im ListIcon Gadget kannst du dir einfach wie eine Liste vorstellen, wobei jeder Eintrag mit einer Nummer (= Index) versehen ist. Diese Nummerierung beginnt bei 0.

Wenn deine Liste beispielsweise so aussieht:

0 = C:\xyz\Test1.txt
1 = C:\xyz\Bild.jpg
2 = C:\irgendwo\Einträge.xlsx

Die Funktion "CountGadgetItems(#TargetFiles)" würde dir in diesem Fall als Ergebnis "3" zurückgeben, weil die Liste 3 Elemente hat. Damit du auf jedes einzelne Element zugreifen kannst, musst du aber den Index des Elements verwenden, also 0, 1 und 2. Dafür kann man eine For-Schleife verwenden, die bei 0 zu zählen beginnt und dann bis 2 zählt. Um auf die 2 zu kommen, nimmt man die Anzahl der Elemente, also 3, und zieht eben eine 1 ab.
udg hat geschrieben:weil wir Datei NULL schon brauchen, da ansonsten Datei 1 weggelassen würde wenn wir bei 1 anfangen zu zählen."
Genau darum geht es. Würdest du bei 1 anfangen zu zählen, dann würde die erste Datei fehlen, weil der Index bei 0 beginnt.
udg hat geschrieben:RenameFile ersetzt den Befehl, Verschiebe, wenn sie im Zielordner nicht vorhanden sind (sonst funktioniert dieser Befehl nicht?).
RenameFile() verschiebt die Datei nur, wenn Sie im Zielverzeichnis noch nicht vorhanden ist. Falls Sie trotzdem verschoben werden soll, müsstest du mit FileSize() zuerst prüfen, ob die Datei schon vorhanden ist und ihr dann entweder einen anderen Dateinamen geben oder die vorhandene Datei löschen.
udg hat geschrieben:Filename deklariert die Dateien welche nach Order Dir2 (Unterordner) verschoben werden sollen, GetFilePart (nimm jede einzelne Datei) und arbeite sie nach "i" dem Zähler ab.
Stimmt, in Filename steht der Dateiname der Datei, die verschoben werden soll. GetFilePart() ermittelt aus einem Dateipfad nur den Dateinamen. Beispiel:

GetFilePart("C:\abc\xyz\Datei1.txt") würde nur "Datei1.txt", also den Dateinamen liefern.