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?
Warten beim Umbenennen einer Datei...
- Ghosty1967
- Beiträge: 205
- Registriert: 29.08.2005 13:56
- Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
- Wohnort: Köln
Re: Warten beim Umbenennen einer Datei...
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...
Ich kann das bei mir nicht feststellen. Unmittelbar nach dem Umbenennen kann ich auf die umbenannte Datei zugreifen.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.
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
Zuletzt geändert von matbal am 07.11.2016 12:56, insgesamt 1-mal geändert.
Re: Warten beim Umbenennen einer Datei...
vielleicht sowas in der Art:
Grüße ... Peter
Code: Alles auswählen
If RenameFile(OldFilename$, NewFilename$)
While FileSize(NewFilename$) <> -1
Delay(WhatEver)
Wend
EndIf
a²+b²=mc²
Re: Warten beim Umbenennen einer Datei...
Viel Spaß beim Warten....If RenameFile(OldFilename$, NewFilename$)
While FileSize(NewFilename$) <> -1
Delay(WhatEver)
Wend
EndIf

Da würde ich mir keine Sorgen machen!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.
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.

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

