PM <pm@xx.xx> wrote:
>>> Czyli że M$ też spartolił własne kopiowanie? :P
>>> Pozatym to nie powinno zależeć od użycia api i tylko system sam powinien
>>> wiedzieć że zapis pliku w całości ma lecieć w wolne miejsce.
>>
>> Nic nie pisałem o kopiowaniu. Skąd w ogóle taki pomysł? Pisałem o
>> sytuacji gdy tworzony jest plik 0 bajtów i następnie do tego pliku
>> dopisywane są dane. W takim wypadku jeśli programista nie ustawi na
> O tworzeniu pliku w kawałkach to logiczne, że system nie wie ile będzie
> miał wynikowy plik. Ale przy kopiowaniu przez explorator też nie wrzuca
> pliku w cały wolny blok, tylko wali od początku dysku, czyli że to nie
> api daje w dupę, a jeśli tak to sami nie umieją korzystać z tego co
> napisali. I tylko o taką sytuację mi chodzi
Algorytm alokacji bloków w sterowniku ntfs zapewniam Cię że jest dużo
bardziej skomplikowany niż proste:
if(znana_wielkość_pliku == true)
{
znajdź_wolne_miesce(potrzebnaliczbaklastrów);
zapiszplik();
}
else
{
while(pozostałodozapisania > 0)
{
znajdź_dowolne_wolne_miejsce();
zapisano = zapisz_część_pliku();
pozostałodozapisania-=zapisano;
}
}
Dlatego chociaż Eksplorator wykorzystuje odpowiednie api to nie zawsze
plik docelowy jest zapisany w jednym fragmencie chociaż często jest.
--
Piotr Borkowski
|