Seite 1 von 1

Warten beim Umbenennen einer Datei...

Verfasst: 07.11.2016 08:31
von Ghosty1967
Hallo zusammen...
ich brauche wieder einmal eure Hilfe. Ich habe den Inhalt eines Verzeichnisses in eine strukturierten Liste eingelesen und
die gefundenen Dateien in ein ListIconGadget() eingetragen.

Was ich gerne möchte ist...
In einer "ForEach" Schleife benenne ich die gefundenen Dateien mittels RenameFile() um. Nach dem Umbenennen soll nun
der entsprechende Eintrag im ListIconGadget() als erledigt markiert werden.
Soweit klappt das auch...
..aber was wirklich passiert ist...
die Markierung im ListIconGadget() läuft sozusagen vor. D.h., das Programm wartet gar nicht erst, bis die Dateioperation abgeschlossen
ist sondern schickt anscheinend einfach alle Umbenennbefehle in einen "Befehlsstack" an das Betriebssystem und das arbeitet diese im
Hintergrund ab.
Ich möchte aber gerne, das diese Markierung erst gesetzt wird, wenn die Operation für die jeweilige Datei wirklich ausgeführt wurde und
die entsprechende Datei wirklich umbenannt oder auch verschoben wurde.

Hat da jemand eine Lösung für mich?

Re: Warten beim Umbenennen einer Datei...

Verfasst: 07.11.2016 10:12
von RSBasic
Ich weiß leider nicht, was dein Programm genau macht bzw. wie es aufgebaut ist, aber wenn du ein Event für eine Dateiumbenennung brauchst: http://www.rsbasic.de/aktualisierung/wi ... mitteln.pb

Re: Warten beim Umbenennen einer Datei...

Verfasst: 07.11.2016 12:39
von matbal
Ghosty1967 hat geschrieben:D.h., das Programm wartet gar nicht erst, bis die Dateioperation abgeschlossen
ist sondern schickt anscheinend einfach alle Umbenennbefehle in einen "Befehlsstack" an das Betriebssystem und das arbeitet diese im
Hintergrund ab.
Ich kann das bei mir nicht feststellen. Unmittelbar nach dem Umbenennen kann ich auf die umbenannte Datei zugreifen.

So habe ich mit 10000 generierten Dateien getestet: Dateien in einer Liste eingelesen. In einer foreach-Schleife erst umbenannt und dann noch kurz zum Lesen geöffnet. Ohne Fehler.

Code: Alles auswählen

Path$ = "d:\test1\"

Structure s_File
   old$
   new$
EndStructure


Global NewList File.s_File()

If ExamineDirectory(0, Path$, "*.txt")
   While NextDirectoryEntry(0)
      If DirectoryEntryType(0) = #PB_DirectoryEntry_File
         name$ = DirectoryEntryName(0)
         AddElement(File())
         File()\old$ = Path$ + name$
         File()\new$ = Path$ + "0" + name$
      EndIf
   Wend
   FinishDirectory(0)
EndIf

ForEach File()
   With File()
      ; Debug \old$
      If RenameFile(\old$, \new$) = 0
         Debug \old$ + " Fehler beim Umbenennen"
      Else
         If ReadFile(0, \new$) 
            CloseFile(0)
         Else
            Debug \old$ + " Fehler beim öffnen"
         EndIf
         
      EndIf
      
   EndWith
   
Next

Re: Warten beim Umbenennen einer Datei...

Verfasst: 07.11.2016 12:47
von Kiffi
vielleicht sowas in der Art:

Code: Alles auswählen

If RenameFile(OldFilename$, NewFilename$)
	While FileSize(NewFilename$) <> -1
		Delay(WhatEver)
	Wend
EndIf
Grüße ... Peter

Re: Warten beim Umbenennen einer Datei...

Verfasst: 23.11.2016 18:31
von DarkSoul
If RenameFile(OldFilename$, NewFilename$)
While FileSize(NewFilename$) <> -1
Delay(WhatEver)
Wend
EndIf
Viel Spaß beim Warten.... :o
die Markierung im ListIconGadget() läuft sozusagen vor. D.h., das Programm wartet gar nicht erst, bis die Dateioperation abgeschlossen
ist sondern schickt anscheinend einfach alle Umbenennbefehle in einen "Befehlsstack" an das Betriebssystem und das arbeitet diese im
Hintergrund ab.
Ich möchte aber gerne, das diese Markierung erst gesetzt wird, wenn die Operation für die jeweilige Datei wirklich ausgeführt wurde und
die entsprechende Datei wirklich umbenannt oder auch verschoben wurde.
Da würde ich mir keine Sorgen machen!

RenameFile() hat doch einen Rückgabewert, ob es geklappt hat. Also wird auch auf das Ergebnis gewartet. Wenn der positiv ist, wurde auch umbenannt und du kannst zur nächsten Dateiumbenennung übergehen.

Was du wahrscheinlich gesehen hast:
Dein Programm ist längst durchgelaufen und erst nach einiger Zeit siehst du das Ergebnis im Windows-Explorer.

Das liegt daran, dass Dateien umbenennen sehr sehr schnell geht und es noch einige Zeit dauert, bis Windows die Änderungen bemerkt und die Dateiliste im Windows-Explorer entsprechend aktualisiert.

Völlig alltäglich und bei vielen Dateioperationen so zu beobachten. Zwischen Datei mit beliebigem Programm speichern und Datei ist zu sehen, vergeht auch immer etwas Zeit. (Vereinfacht gesagt: Er guckt nur alle paar Sekunden, ob was verändert wurde und aktualisiert ggf. daraufhin).

In Wirklichkeit sind deine Dateien in dieser Zeitspanne dazwischen auf dem Datenträger längst umbenannt. :mrgreen:

Die Anzeige im Windows-Explorer läuft zeitlich der Realität nur ein wenig nach. :)