2009-07-06 10 views
5

Jaka jest logika defragmentacji dysku i sprawdzania dysku w systemie Windows? Czy mogę to zrobić za pomocą kodowania C#?Logika w Disk Defragmantation i Disk Check

+2

Defragmentacja dysku jest złożonym tematem i jest specyficzna dla podstawowego systemu plików urządzenia, które defragmentujesz. Co dokładnie próbujesz osiągnąć? – scwagner

+3

Dlaczego miałbyś przeprowadzić defragmentację dysku w C#, jeśli nie znasz jej koncepcji? –

+0

Robię aplikację opartą na systemie. Chcę zaimplementować w nim defragmentator dysków i narzędzie sprawdzania dysku. – Sauron

Odpowiedz

7

Przez wzgląd na kompletność, oto C# API wrapper do defragmentacji:

http://blogs.msdn.com/jeffrey_wall/archive/2004/09/13/229137.aspx

Defragmentacja z tych interfejsów API jest (powinien być) bardzo bezpieczny w dzisiejszych czasach. Nie powinieneś być w stanie uszkodzić systemu plików, nawet jeśli chcesz.

Komercyjne programy do defragmentacji korzystają z tych samych interfejsów API.

+2

Różnica polega na tym, że firmy komercyjne wiedzą o systemach plików, a OP nie może nawet zdefiniować defragmentacji. Chciałbym, żeby wiedział, co to za spust, zanim dam mu pistolet. –

3

Spójrz na numer Defragmenting Files w msdn, aby uzyskać pomocników API.

Powinieneś ostrożnie pomyśleć o użyciu C# do tego zadania, ponieważ może to wprowadzić niepożądane obciążenie dla przechwytywania do natywnego Win32.

3

Jeśli nie znasz logiki do defragmentacji i jeśli sam nie napisałeś systemu plików, więc nie możesz autorytatywnie sprawdzić, czy nie występują w nim błędy, może po prostu uruchom nowe procesy z opcją "defrag" i "chkdsk" "?

1

Pomimo swojej wagi system plików jest niczym więcej niż strukturą danych, która odwzorowuje nazwy plików na listy bloków dyskowych. I śledzi meta-informacje, takie jak rzeczywista długość pliku i pliki specjalne, które przechowują listy plików (np. Katalogi). Kontroler dysków sprawdza, czy struktura danych jest spójna. Oznacza to, że każdy blok dysku musi być albo wolny do przydzielenia do pliku, albo do jednego pliku. Może również sprawdzić, czy niektóre bloki dysków wydają się być plikami, które powinny znajdować się w katalogu, ale nie z jakiegoś powodu.

Defragmentacja polega na przeglądaniu list bloków dyskowych przypisanych do każdego pliku. Pliki będą zazwyczaj ładować się szybciej, jeśli będą używać ciągłego zbioru bloków, a nie plików rozproszonych po całym dysku. Zasadniczo cały system plików będzie działał najlepiej, jeśli wszystkie używane bloki dyskowe ograniczą się do jednego spójnego zakresu dysku. Tak więc sztuczka polega na przemieszczaniu bloków dysków w bezpieczne miejsce, aby osiągnąć ten cel, nie niszcząc systemu plików.

Główna trudność polega na uruchomieniu tych aplikacji, gdy dysk jest w użyciu. Jest to możliwe, ale trzeba być bardzo, bardzo, bardzo ostrożnym, aby nie popełnić jakiegoś oczywistego lub bardzo subtelnego błędu i zniszczyć większość lub wszystkie pliki. Łatwiej jest pracować w systemie plików w trybie offline.

Inną trudnością jest uporanie się ze złożonością systemu plików. Na przykład znacznie lepiej byłoby budować coś, co obsługuje system plików FAT32 niż NTFS, ponieważ ten pierwszy jest znacznie prostszym systemem plików.

Dopóki masz niski poziom dostępu do bloku i rozsądny sposób radzenia sobie z problemami współbieżności (najlepiej obsługiwane przez pracę w systemie plików, gdy nie jest używany) możesz to zrobić w C#, perlu lub dowolnym języku lubisz.

ALE BARDZO DOSKONAŁA. Wcześniejsze wersje programu zniszczą całe systemy plików. Późniejsze wersje zrobią to, ale tylko w niejasnych okolicznościach. A użytkownicy niszczą swoje dane, gdy są wyjątkowo wściekli i sprzeczni.

+0

Dzięki Philips, może to dać mi rozwiązanie. – Sauron

+1

Istnieją interfejsy API systemu Windows do defragmentacji, które są całkowicie bezpieczne i działają w systemie plików NTFS. – andreialecu

3

Mark Russinovich napisał artykuł Inside Windows NT Disk Defragmentation jakiś czas temu, który zawiera szczegółowe informacje. Jeśli naprawdę chcesz to zrobić, naprawdę radzę użyć wbudowanych funkcji do defragmentacji. Co więcej, na ostatnich systemach nigdy nie widziałem potrzeby, aby użytkownik dbał o defragmentację; zostanie to zrobione automatycznie zgodnie z harmonogramem, a ludzie z NTFS w MS są zdecydowanie mądrzejsi od ciebie (przepraszam, ale robią to od jakiegoś czasu, nie robisz tego).

+0

Ten artykuł jest bardzo pomocny. – Sauron