Datei umbenennen

Anfängerfragen zum Programmieren mit PureBasic.
walter741
Beiträge: 68
Registriert: 26.10.2008 09:21
Computerausstattung: P4, 2600, 1,5GB Ram, XP SP3
Wohnort: Wien

Datei umbenennen

Beitrag 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
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag 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.
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.
walter741
Beiträge: 68
Registriert: 26.10.2008 09:21
Computerausstattung: P4, 2600, 1,5GB Ram, XP SP3
Wohnort: Wien

Beitrag 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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
walter741
Beiträge: 68
Registriert: 26.10.2008 09:21
Computerausstattung: P4, 2600, 1,5GB Ram, XP SP3
Wohnort: Wien

Beitrag 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.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ok... das ist ein wichtiger punkt.

wie wird die denn nun erstellt...
fortlaufend, immer wieder dazuschreiben?
in welchem rhythmus?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
walter741
Beiträge: 68
Registriert: 26.10.2008 09:21
Computerausstattung: P4, 2600, 1,5GB Ram, XP SP3
Wohnort: Wien

Beitrag 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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
walter741
Beiträge: 68
Registriert: 26.10.2008 09:21
Computerausstattung: P4, 2600, 1,5GB Ram, XP SP3
Wohnort: Wien

Beitrag 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
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Antworten