Datei umbenennen
-
- Beiträge: 68
- Registriert: 26.10.2008 09:21
- Computerausstattung: P4, 2600, 1,5GB Ram, XP SP3
- Wohnort: Wien
Datei umbenennen
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
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
-
- Beiträge: 6291
- Registriert: 29.08.2004 08:37
- Computerausstattung: Hoffentlich bald keine mehr
- Kontaktdaten:
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.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
-
- Beiträge: 68
- Registriert: 26.10.2008 09:21
- Computerausstattung: P4, 2600, 1,5GB Ram, XP SP3
- Wohnort: Wien
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
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
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
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
> 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
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
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.
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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
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.
PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End