Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
Delphi
Soubor je již otevřený
21. ledna 2002, 00.00 | Zajímá vás, jak v Delphi zjistit, zda nějaký soubor je otevřen jiným procesem. A nemusí být otevřen jen pro zápis, ale také pro čtení.
Zjištění zda se souborem pracuje již nějaký jiný proces, může být zvláště výhodné, pokud se může v jeden okamžik vyskytovat v paměti daný proces několikrát. A nemusí to být jen tento případ, ale také např. obsluhuje-li soubor normálně jiný proces a my ho chceme jen z nějakého důvodu načíst, pozměnit či smazat.
Pokud použijeme klasickou cestu tj. budeme předpokládat, že daný soubor je vždy připravený pouze pro nás, může se stát, že program občas vyhodí nějakou chybovou hlášku. Ta se dá odstranit např. tím že si odchytíme IOResult. Ale v ničem jiném nám to nepomůže.
Mohlo by to například vypadat takto:
|
Tento způsob nám zajistí pouze to, že daný soubor není otevřen někým jiným pro zápis a tudíž ho můžeme číst my ale také někdo jiný. Pokud by jsme ho chtěli smazat pravděpodobně vznikne výjimka, čte-li ho ještě někdo jiný.
Předcházející způsob, však ještě nebere v úvahu jednu věc. A to, že já daný soubor vůbec nemusím chtít otevřít. Příklad: je-li spuštěný nějaký proces, může běžet i na jiném PC, takže v seznamu běžících procesů na lokálním počítači bych ho nenašel, a vím-li, že např. po celou dobu svého běhu má otevřený log soubor či jakýkoliv jiný soubor, můžu na základě této informace odvodit, že daný proces je aktivní.
Lze to vyřešit jednouchou funkcí, kterou si zjistíme, zda má daný soubor někdo otevřený jak pro zápis, tak pro čtení. Mohlo by to reálně vypadat takto:
|
Tento způsob by měl správně zjistit, zda je daný soubor otevřen a to i pro čtení.
Můžeme si ještě ukázat malinkatý prográmek, který nám ukáže, zda to opravdu funguje.
|
Tento jednoduchý program je ukázkovou demonstrací, která by měla potvrdit, že daný postup je funkční. Při spuštění je nutné mu jako první a jediný parameter zadat jméno souboru, který chcete otestovat.
Mohlo by vás zmást, to že soubor otevřeného dokumentu či spuštěného programu často není brán jako otevřený. A je to správně. Na vysvětlenou, při otevírání dokumentu se obvykle dokument otevře, načte jeho obsah a uzavře. Tudíž po většinu doby editace je soubor zavřený.
Kódy zde zmíněné jsou uloženy archivu fileinuse.zip (1 kB).
-
25. listopadu 2012
-
30. srpna 2002
-
10. října 2002
-
4. listopadu 2002
-
12. září 2002
-
25. listopadu 2012
-
28. července 1998
-
31. července 1998
-
28. srpna 1998
-
6. prosince 2000
-
27. prosince 2007
-
4. května 2007