Přepsání souborů používaných systémem

Windows NT/ Windows 2000:
API funkce MoveFileEx s parametrem MOVEFILE_DELAY_UNTIL_REBOOT Umožňuje přesouvat, zaměňovat nebo mazat soubory a adresáře, které jsou momentálně používány. Při dalším restartu systému pak bootovací program přesune, nahradí nebo smažena specifikované soubory.

Pro přesun nebo záměnu souborů či adresářů, které jsou momentálně používány, musí aplikace specifikovat jak zdrojovou, tak i cílovou cestu souborů na tom samém disku. Pokud je cílová cesta existující soubor, bude přepsán. Pokud je cílovou cestou existující adresář, nebude přepsán a jak cílové, tak zdrojové soubory zůstanou v původním stavu. Například, pro přesun nebo záměnu souboru či přesun adresáře:

   Dim sSourceFile As String
   Dim sDestFile   As String

   Call MoveFileEx(sSourceFile, sDestFile, MOVEFILE_DELAY_UNTIL_REBOOT)

Pro smazání souboru nebo adresáře musí aplikace nastavit cílovou cesu na Null. Pokud je zdrojovou cestou adresář, bude smazán pouze v případě, že je prázdný.  Pokud musíte použít MoveFileEx k odstranění souborů z adresáře, musíte nejprve restartovat počítač  před voláním MoveFileEx k odstranění adresáře.  Pro smazání souboru nebo prázdného adresáře:

MoveFileEx(sSourceFile, vbNull, MOVEFILE_DELAY_UNTIL_REBOOT)

Windows 9x:
Pro přesun, nahrazení nebo smazání souborů (ale ne adresářů), které jsou momentálně používány, musíte použít sekci [rename] v souboru Wininit.ini.  Pokud je soubor Wininit.ini v adresáři Windows, pak proces Wininit.exe jej zpracuje při bootu systému.  Jakmile je soubor Wininit.ini zpracován, Wininit.exe jej přejmenuje na Wininit.bak.

Syntaxe sekce [rename] je:
DestinationFileName=SourceFileName 

DestinationFileName a SourceFileName musí být na tom samém disku a musí mít krátky (8.3) formát jména souboru. 

Sekce [rename] může mít více řádků.  Pro smazání souboru specifikujte NUL jako  DestinationFileName.  Například:

[rename]
NUL=C:\TEMP.TXT
C:\NEW_DIR\EXISTING.TXT=C:\EXISTING.TXT
C:\NEW_DIR\NEWNAME.TXT=C:\OLDNAME.TXT
C:\EXISTING.TXT=C:\TEMP\NEWFILE.TXT

První řádek určuje, že soubor Temp.txt bude smazán.  Druhý řádek určuje, že soubor Existing.txt bude přesunut do nového adresáře.  Třetí řádek určuje, že soubor Oldname.txt bude přesunut a přejmenován.  Na čtvrtém řádku je syntaxe pro přepsání původního souboru souborem Newfile.txt.

Pokaždé si ověřte, zda soubor Wininit.ini existuje.  Pokud ano, tak jej již zapsala jiná aplikace před tím, než byl systém restartován.  Vaše aplikace jej pak může otevřít a přidat povely do sekce [rename].  Pokud Wininit.ini neexistuje, musí jej Vaše aplikace nejprve vytvořit a teprve potom přidat povely do sekce [rename].

Zpět

Autor: The Bozena