Page 1 of 1
Kopirovani zamknutych souboru
Posted: 10 Mar 2010, 14:21
by Raptor
Narazil jsem na hodne divnou vec. jedna se o kopirovani souboru zamknutych jinym procesem exkluzivne (snad ted nekecam). Pokud soubor chci kopirovat, vyskoci chyba. To je ok, to problem neni. Ale co nechapu je to, proc se jakoby neco kopiruje a pri 97% vyskoci chyba? Proc nevyskoci hned kdyz dam kopirovat? Pokud ten soubor ma par giga tak cekam, cekam cekam, kopiruje se to a najednou chyba a ja tim cekanim zabil par minut tak to nepotesi.

- copy.png (42.18 KiB) Viewed 10127 times
Re: Kopirovani zamknutych souboru
Posted: 10 Mar 2010, 14:31
by Jan Patera
Raptor wrote:Narazil jsem na hodne divnou vec. jedna se o kopirovani souboru zamknutych jinym procesem exkluzivne (snad ted nekecam). Pokud soubor chci kopirovat, vyskoci chyba. To je ok, to problem neni. Ale co nechapu je to, proc se jakoby neco kopiruje a pri 97% vyskoci chyba? Proc nevyskoci hned kdyz dam kopirovat?

Mozna by bylo dobre si precist tu chybovou hlasku. Proste dokud tam Salamander nedocetl, tak to nezjistil. Otazkou je, zda se to da zjistit apriori.
Re: Kopirovani zamknutych souboru
Posted: 10 Mar 2010, 14:38
by Jan Rysavy
Tu položku Name jste vyretušoval nebo tam skutečně nebylo nic zobrazeno?
O jaké jde soubory a jakým procesem jsou zamčené? Jde o nějaký torrent nebo jiný downloader?
Poznámka: Salamander čte při kopírování soubory s flagy FILE_SHARE_READ | FILE_SHARE_WRITE. Viz
Creating and Opening Files.
Takže ostatní procesy mohou z/do kopírovaného souboru číst i zapisovat.
Jiný proces by nám ale neměl mít možnost odebrat právo ke čtení. Proto mě zajímá o jakou aplikace se jedná.
Re: Kopirovani zamknutych souboru
Posted: 10 Mar 2010, 15:03
by Raptor
Vyretusoval. Toto konkretne je zamkla souborova databaze z Money S3.
A to me prave zajima, nejde zjistit dopredu ze je soubor zamkly?
Re: Kopirovani zamknutych souboru
Posted: 10 Mar 2010, 15:05
by Jan Rysavy
Pokud nám popíšete, jak problém reprodukovat, můžeme se na věc mrknout. Momentálně nás nenapadá, jak k situaci může docházet, viz update mého příspěvku.
Re: Kopirovani zamknutych souboru
Posted: 10 Mar 2010, 15:12
by Raptor
No jedine co me napada je nainstalovat si Trial Money S3, spustit to, otevrit treba nejakou kmenovou kartu nebo neco a zkusit zkopirovat adresar Data.
Re: Kopirovani zamknutych souboru
Posted: 10 Mar 2010, 15:16
by Jan Rysavy
Ještě několik nápadů:
Jaký OS máte na počítači, kde spouštíte kopírování?
Je soubor na lokálním nebo síťovém disku?
Pokud na síťovém, o jaký jde systém na straně "serveru"?
Re: Kopirovani zamknutych souboru
Posted: 10 Mar 2010, 15:18
by Raptor
Kopirovani ze serveru.
Win Vista x32 a Win Server 2003
Re: Kopirovani zamknutych souboru
Posted: 10 Mar 2010, 15:19
by Jan Rysavy
Přesunu vlákno do návrhů na vylepšení, asi se shodneme, že se nejedná o chybu.
Přál byste si, aby Salamander dokázal předem detekovat, že část souboru nebude přístupná pro čtení.
Momentálně to Salamander zjistí a oznámí až ve chvíli, kdy se tuto část snaží přečíst.
Poznámka: situaci lze navodit takto
Code: Select all
HANDLE hFile = CreateFile("soubor.tmp", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL);
if (hFile != INVALID_HANDLE_VALUE)
{
LockFile(hFile, 100000, 0, 1, 0); // 100000 je ofset, od ktereho soubor zamkneme
CloseHandle(hFile); // zde umistit breakpoint a po jeho dosazeni zacit soubor kopirovat v Salamanderu
}
Re: Kopirovani zamknutych souboru
Posted: 10 Mar 2010, 23:36
by zarevak
Napadá mne jednoduché ale asi ne úplně praktické řešení: Zkusit zamknout celý soubor
Pokud na něm již budou nějaké zámky existovat, tak zamčení selže. Jen nevím, jak to dopadne s ostatními aplikacemi, které mají soubor otevřený - aby pak nespadly s touto chybou 33... Případně, zda vůbec lze zamknout soubor, který má pro zápis otevřený jiná aplikace...
Re: Kopirovani zamknutych souboru
Posted: 10 Mar 2010, 23:48
by Jan Rysavy
Je to rozhodně zajímavé, neměli jsme o možnosti zamčení části souboru tušení. Nyní chápu, jak mohou souborové databáze jako MS Access zamykat databázi po větách. Samozřejmě bude otázkou, jak zamykání bude fungovat na síťových discích (třeba namátkou Samba).