Jak napisac prosty Defrag?

0

Chciałbym napisać prostego defragmentatora. Potrzebuje informacji na temat odczytywania i zapisywania wybranych sektorów na dysku. Informacji o miejscu polozenia pliku na dysku oraz sprawdzania czy dany sektor jest wolny.

0

Obawiam się, że możesz mieć trochę problemów:

  1. Ciężko testować coś takiego (jak coś skiepścisz, to sięmoże źle skończyć dla Twojego dysku).
  2. Nie wiem, czy system pozwoli Ci na takie niskopoziomowe mazanie po dysku. Ja takie operacje zawsze robię Diskeditor'em pod DOS'em.
0

Bac sie nie boje bo testowalbym na dyskietkach albo virtualnej maszynie. A chcialbym napisac wlasnie taki program do ukladania danych na dysku w/g mojej kolejnosci.

0
macgyver2004 napisał(a)

Bać się nie boję, bo testowałbym na dyskietkach albo wirtualnej maszynie.

Polecam to rozwiązanie - łatwo też potem to debugować. Po prostu musisz zapoznać się z budową formatu dysku jaki chcesz defragmentować (np.: FAT32, NTFS) i znając to, po prostu potraktować dysk jako jeden gigantyczny ciąg danych i przenosić jedne tu, inne tam ;) .

Polecam też skorzystać z istniejących już, gotowych i często bardzo dobrych narzędzi dostepnych na necie.

0

Tyle kwestia tego, czy system pozwoli. Bo ja osobiscie jakbym był Windowsem NT to bym nie pozwolił ;)

0
Ktos napisał(a)

Tyle kwestia tego, czy system pozwoli. Bo ja osobiscie jakbym był Windowsem NT to bym nie pozwolił ;)

będąc administratorem, jesteś bogiem tego systemu.
otworzyć dysk do odczytu/zapisu można funkcją createfile - tu odpowiedni kawałek z helpa

Disk Devices
Windows NT: You can use the CreateFile function to open a disk drive or a partition on a disk drive. The function returns a handle to the disk device; that handle can be used with the DeviceIOControl function. The following requirements must be met in order for such a call to succeed:

? The caller must have administrative privileges for the operation to succeed on a hard disk drive.
? The lpFileName string should be of the form \.\PHYSICALDRIVEx to open the hard disk x. Hard disk numbers start at zero. For example:

String Meaning
\.\PHYSICALDRIVE2 Obtains a handle to the third physical drive on the user's computer.

? The lpFileName string should be \.\x: to open a floppy drive x or a partition x on a hard disk. For example:

String Meaning
\.\A: Obtains a handle to drive A on the user's computer.
\.\C: Obtains a handle to drive C on the user's computer.

1 użytkowników online, w tym zalogowanych: 0, gości: 1