Seite 1 von 2
Datei umbenennen
Verfasst: 23.12.2008 11:51
von walter741
Hallo
Ich hoffe Ihr könnt mir helfen ???
Wie erkenne ich, ob eine Datei benutzt wird oder nicht?
Wird sie nicht benutzt, möchte ich sie umbenennen.
Ich dachte es geht mit RenameFile:
If RenameFile("C:\THF\Original.txt", "C:\THF\Neu.txt")
Debug "Umbenennen = OK"
Else
Debug "Umbenennen = Fehler"
EndIf
Ist die Datei "Original.txt" bereits mit Word geöffnet,
so kommt die Fehlermeldung. Das währe richtig !
Ist die Datei "Original.txt" aber mit dem Editor geöffnet,
so wird die Datei "Original.txt" in "Neu.txt" umbenannt.
Es wird eine bereits geöffnete Datei ohne Fehler umbenannt.
Also, wie kann ich feststellen ob eine Datei bereits verwendet wird,
damit ich sie gefahrlos umbenennen kann.
Während dem Umbenennen muss sie natürlich auch für andere
Zugriffe gesperrt sein !
Danke im voraus für Eure hilfe
Verfasst: 23.12.2008 11:58
von DarkDragon
Du kannst sie ruhig umbenennen, da ist keine Gefahr dabei. Notepad öffnet die Datei "shared" und Word halt nicht. Das handelt dann das Betriebssystem und du brauchst dich darum nicht kümmern.
Verfasst: 23.12.2008 13:21
von walter741
Soweit klar
Es handelt sich um eine automatisch generierte und ständig aktualisierte
Protokolldatei.
Um sie in ruhe abarbeiten zu können möchte ich sie umbenennen.
Wenn diese Protokolldatei gerade aktualisiert wird UND ich sie gleichzeitig umbenenne, könnte in der neu angelegten Datei der alte als auch der aktualisierte Teil stehen.
Gruss Walter
Verfasst: 23.12.2008 13:37
von Kaeru Gaman
was das OS das grundsätzlich verhindern würde, weiß ich nicht, aber
> könnte in der neu angelegten Datei der alte als auch der aktualisierte Teil stehen.
halte ich für praktisch unmöglich.
grundsätzlich sehe ich das als ein problem des internen handlings.
du solltest ein Globales Flag in deiner Anwendung haben (oder ein Semaphore/Mutex)
das sicherstellt, dass nicht gleichzeitig umbenannt und geschrieben werden kann.
am einfachsten wäre es, wenn du in der selben procedure zuerst umbenennst
und dann die neue protokolldatei öffnest.
... oder schreibst du immer nur einen satz pro zeiteinheit in das Log,
und es soll nen ganzen tag oder so zusammenfassen?
dann wirst du um ein sauberes Flagging nicht drumrum kommen
Verfasst: 23.12.2008 14:31
von walter741
Hallo
Die Protokolldatei wird unabhängig von mir, von einer Maschine geschrieben.
Darauf habe ich keinen einfluss.
Ich werte diese Protokolldatei nur aus.
Verfasst: 23.12.2008 14:46
von Kaeru Gaman
ok... das ist ein wichtiger punkt.
wie wird die denn nun erstellt...
fortlaufend, immer wieder dazuschreiben?
in welchem rhythmus?
Verfasst: 23.12.2008 14:57
von walter741
Hallo Kaeru Gaman
Es wird immer unten dazugeschrieben.
Wird die Datei gelöscht, so wird eine neue Datei mit
dem selben Namen erstellt.
in welchem rhythmus ?
Von 5 sec bis 1 Stunde. Also undefiniert.
Walter
Verfasst: 23.12.2008 15:32
von Kaeru Gaman
verstehe.
also wäre es tatsächlich notwendig festzustellen, ob das fremdprogramm gerade zugreift.
ich war grad so ins blaue am grübeln...
natürlich könnte man auch versuchen, die datei exklusiv zu öffnen.
wenn das fremdprogramm grad zugreift, schlägt das fehl und man probierts eine sekunde später noch mal.
wenn es gelingt, kann dann das fremdprogramm nicht zugreifen, und muss es seinerseits später noch mal probieren.
allerdings müßte man dann in genau diesem zugriff auch umbenennen oder kopieren/löschen.
Verfasst: 23.12.2008 15:43
von walter741
Hallo
Ja Ja Ja Ja und nochmals Ja
Genau das meine ich !
Wie öffnet man eine Datei "EXKLUSIV"
(Also so richtig Egoistisch, wenn ich, dann kein anderer)
Walter
Verfasst: 23.12.2008 15:48
von AND51
Da gibt es den Befehl LockFile_() für. Such danach doch bitte mal hier im Forum und in der MSDN. In meinem Bestreben, den Befehl einfach in einen PB Befehl umzuwandeln, der ähnlich wie der CGI/Perl Befehl flock() arbeitet, rate ich dir auch das englische Forum nach diesem Befehl zu durchsuchen. Hatte mich nämlich mal mit irgendwem dort darüber unterhalten.