Seite 1 von 3

RenameFile funtioniert nicht

Verfasst: 28.06.2017 12:26
von Heinz Mendax
Hallo !
Habe ein Umnenntool für Bilddateien programmiert, das einige Merkmale zum Inhalt des Bildes und zum Aufnahmedatum im Dateinamen aufnimmt. Zum Schluss des Programms soll folgende Zeile das Umnennen ausführen.

erg=RenameFile(AlterDateiname$,NeuerDateiname$)

Das funktioniert aber nicht immer, hauptsächlich nicht, wenn die Bilder auf einer externen Festplatte sind. Dann ist
bei Kontrolle nichts passiert, ausser das man die Zeit für die Bearbeitung einer größeren Anzahl Bilder vertan hat. Beim Debuggen ist erg manchmal 0 - dh. RenameFile funktionierte nicht. Was Kann man dann außer RenameFile tun, daß die Dateien auf jeden Fall umbenannt werden.

mfG
Heinz

Re: RenameFile funtioniert nicht

Verfasst: 28.06.2017 12:58
von Pelagio
Hallo Heinz Mendax,

das umbenennen der Dateien müsste funktionieren aber es sind natürlich dazu Voraussetzungen notwendig, die man aus deinem Text nicht herauslesen kann.
Ist der Pfad in den Dateinamen mit angegeben?
Hast Du dei entsprechenden Rechte in den Verzeichnissen?
ist die eine oder andere Datei eventuell in gebrauch?
Ich hatte mit dem Befehl bis dato noch nie Probleme.

Re: RenameFile funtioniert nicht

Verfasst: 28.06.2017 13:16
von ts-soft
Ergänzend zu Pelagio:
Heinz Mendax hat geschrieben:Habe ein Umnenntool für Bilddateien programmiert, das einige Merkmale zum Inhalt des Bildes und zum Aufnahmedatum im Dateinamen aufnimmt.
Überprüft, ob der Dateiname noch den Konventionen des Dateisystems entspricht?
Pfadlänge mit Dateiname noch unter maximaler Länge (z.B. 260 Zeichen)?
Ist das externe Laufwerk irgendwas besonderes? Also z.B. ein NAS-Laufwerk?

Re: RenameFile funtioniert nicht

Verfasst: 28.06.2017 17:15
von Heinz Mendax
Hallo !
Ergänzung : die externen Festplatten sind USB-Laufwerke
- Dateien einunddesselben Verzeichnisses gehen oder gehen nicht umzunennen
- Dateien ist das Archivbit gesetzt
- es werden Dateinamen von der Form 2017-06-23_ACDF_DSCF3203.mpo erzeugt oder JPG usw.
- es wird aber kein Fehler gemeldet (Windows)

Die RenameFile - Routine gibt eine Zahl oder 0 zurück, falls ein Fehler passiert. Wenn dieser Fall praktisch
vorgesehen ist, muß es doch Mittel dagegen geben.

Re: RenameFile funtioniert nicht

Verfasst: 28.06.2017 17:26
von Kiffi
Hallo Heinz,

zu Debug-Zwecken kannst Du Dir ja mal die Namen der Dateien ausgeben lassen, bei denen ein RenameFile() fehlschlägt. Vielleicht lässt sich da ein Muster erkennen.

Code: Alles auswählen

Result = RenameFile(OldFilename$, NewFilename$)

If Result = 0
	Debug "RenameFile() fehlgeschlagen!"
	Debug "OldFilename: '" + OldFilename$ + "'"
	Debug "NewFilename: '" + NewFilename$ + "'"
	Debug "-----"
EndIf
Grüße ... Peter

Re: RenameFile funtioniert nicht

Verfasst: 28.06.2017 18:33
von Nino
Heinz Mendax hat geschrieben:Beim Debuggen ist erg manchmal 0 - dh. RenameFile funktionierte nicht.
Ich würde das Ergebnis auch im Normalbetrieb immer auswerten, nicht nur beim Debuggen. Falls Fehler auftreten, kann das Programm die Einzelheiten in eine Log-Datei schreiben und am Schluss eine kurze Meldung ausgeben.

Re: RenameFile funtioniert nicht

Verfasst: 28.06.2017 18:59
von GPI
Eventuell ist die Datei noch geschützt - weil irgendein Programm noch zugreift (Virenscanner, Upload, wasweisichdenn).

Probier mal folgendes:

Code: Alles auswählen

for loop = 1 to 5 
  Result = RenameFile(OldFilename$, NewFilename$)
  if result
    break
  else
    delay(100)
  endif
next
if result=0
  debug "[ERROR]"+Oldfilname$+" => "+NewFilename$
endif
Hier werden dann 5 Versuche unternommen - und maximal eine halbe Sekunde gewartet.

Re: RenameFile funtioniert nicht

Verfasst: 29.06.2017 08:55
von Heinz Mendax
Hallo !

Habe die Fehlerabfrage mit Delay eingebaut. Das Umnennen klappt nicht bei bestimmten Dateien eines Verzeichnisses.
Vielleicht ist doch eine Datei geöffnet o.ä. , da die Bilder kurz vorher angezeigt werden mit:

Code: Alles auswählen

  Ergebnis = ResizeImage(1, w3, h3, #PB_Image_Smooth)
 If image ;(2)
    OpenWindow(1,0,0,w3,h3,a1$,#PB_Window_ScreenCentered)        (a1$ ist der Pfad des Bildes)
    ImageGadget(1,0,0,w3,h3,Ergebnis) 

       Repeat 
      Select WaitWindowEvent() 
        Case #PB_Event_CloseWindow :CloseWindow(1): Goto weiter
        Case #WM_RBUTTONUP         : CloseWindow(1): Goto weiter    
      EndSelect 
     ForEver 
  EndIf ;(2)
Ein Click mit der Maus schließt das Fenster. Ist hier im Code etwas unvollständig, was die Datei nicht immer freigibt.
mfG
Heinz

NicTheQuick: Code-Tags hinzugefügt

Re: RenameFile funtioniert nicht

Verfasst: 29.06.2017 10:22
von GPI
Heinz Mendax hat geschrieben: Case #PB_Event_CloseWindow :CloseWindow(1): Goto weiter
Case #WM_RBUTTONUP : CloseWindow(1): Goto weiter
Bitte sag mir, das du nicht ernsthaft aus einer schleife mittels Goto rausspringst....

Grausam, einfach nur grausam.

Re: RenameFile funtioniert nicht

Verfasst: 29.06.2017 10:42
von TroaX
Sah für mich eher nach Pseudo-Code aus das Goto :mrgreen:

Aber bau mal nach der Anzeige des Fensters und dem Bild ein Delay von vllt. 50 ms ein. Danach sollte das File eigentlich frei sein. Wenn das nicht der Fall ist, kann es sein, das du vergisst, nach dem Laden der Datei selbige wieder zu schließen?