/* Λειτουργία στη δορά (και παρουσιάστε) δρομέας στην οθόνη */
show_hide_cursor ( 32, 0 );
gotoxy(15,18);cprintf("[ %d ] Files Recovered...",
num);
/* αναζήτηση των στοιχείων μέχρι τον τελειώνοντας τομέα του δίσκου */
while(loop<Sectors_in_HDD2)
{
/* Διαβάστε έναν τομέα (Sector No. = loop) */
readabsolutesectors ( 0x81, loop, 1, buffer );
gotoxy(19,16);cprintf("Scanning Sector Number = % ld",
loop);
if(kbhit())
{
show_hide_cursor ( 6, 7 ); /* Retrieve the
cursor before
Exit the program
*/
exit(0);
}
/* εάν διευκρινίζεται η επιγραφή βρίσκεται */
if((memcmp ( buffer, header,7))==0)
{
/* λογική για να παρέχει το όνομα αρχείων αυτόματα
δημιουργήστε τα αρχεία για να σώσετε τα ανακτημένα στοιχεία */
strcpy(filename, path);
itoa(num,temp,10);
strcat(filename, temp);
strcat(filename,".DOC");
start_file=loop; /* starting sector of file */
gotoxy(5,19);cprintf("File Found..., Saving As %s",
filename);
num++;
////////////// Το αρχείο κλείνει τους όρους \\\\\\\\\\\\\\\\
file_size=0;
while( file_size<5000000)
{
loop++;
file_size+=512;
readabsolutesectors ( 0x81, loop, 1, buffer );
gotoxy(19,16);cprintf("Scanning Sector Number = % ld" ,
loop);
/* εάν το μέγεθος αρχείων φθάνει μέχρι το μέγιστο μέγεθος 5MB */
if(file_size>=5000000)
{
end_file=loop; /* Τελείωμα του τομέα του αρχείου */
Recover_the_file();/* γράψτε τα στοιχεία στο αρχείο */
break;
}
/* εάν η υποσημείωση του αρχείου εγγράφου βρίσκεται */
for(i=0;i<512;i++)
{
if( memcmp(buffer+i,DOC_footer,12)==0 )
{
end_file=loop; /* Τελείωμα του τομέα του αρχείου */
Recover_the_file();/* γράψτε τα στοιχεία στο αρχείο */
break;
}
}
/* εάν μια άλλη επιγραφή βρίσκεται */
if( memcmp(buffer,header,7)==0 )
{
loop=loop-1;
end_file=loop; /* Τελείωμα του τομέα του αρχείου */
Recover_the_file();/* γράψτε τα στοιχεία στο αρχείο */
break;
}
if(kbhit())
{
show_hide_cursor ( 6, 7 );
exit(0);
}
}
}
loop++;
} ////////Ενώ ο βρόχος τελειώνει εδώ
/* μήνυμα επίδειξης για την ολοκλήρωση της αναζήτησης και της αποκατάστασης */ if(loop>=Sectors_in_HDD2 )
{
gotoxy(17,23);cprintf("The Saving of files in the Disk is
Completed !!");
gotoxy(17,24);cprintf("Press Any Key to Exit...");
show_hide_cursor ( 6, 7 );
getch();
}
}
Σχόλια στην κωδικοποίηση:
Η γεωμετρία δομών χρησιμοποιείται από την getdrivegeometry λειτουργία χρησιμοποιώντας την επέκταση INT 13H, αριθμός λειτουργίας 0x48 για να πάρει τις διάφορες παραμέτρους του δίσκου.
Η δομή diskaddrpacket είναι για το σχήμα πακέτων διευθύνσεων δίσκων, που χρησιμοποιείται από τη λειτουργία readabsolutesectors.
Η λειτουργία getdrivegeometry (κίνηση INT) είναι να αποκτηθούν οι παράμετροι Drive της διευκρινισμένης δίσκος φυσικής κίνησης αριθμού κίνησης.
(char) peekb(0x0040, 0x0075) χρησιμοποιείται για να βρεί τον αριθμό σκληρών δίσκων που συνδέονται με τον υπολογιστή, που αποθηκεύεται στη θέση μνήμης που αντιπροσωπεύεται από το τμήμα 0040H:offset 0075H. Εάν ο συνολικός αριθμός σκληρών δίσκων συνημμένων είναι λιγότερο έπειτα μήνυμα λάθους δύο επίδειξης και έξοδος.
Sectors_in_HDD2=getdrivegeometry (0x81) βρίσκει τις διάφορες παραμέτρους του δεύτερου φυσικού σκληρού δίσκου (0x81) και επιστρέφει το συνολικό αριθμό τομέων του δίσκου.
Η δήλωση if(access(path, 0)! = 0) ελέγχει τη δυνατότητα πρόσβασης της πορείας που δίνεται από το χρήστη. Εάν ο κατάλογος προορισμού δεν υπάρχει, ο προορισμός δημιουργείται μέχρι ένα επίπεδο και εάν η δεδομένη πορεία που ελέγχεται από τον όρο εάν (mkdir (path)!=0) είναι παράνομος, μήνυμα λάθους επιδεικνύεται.
Τα ονόματα αρχείων των αυτόματα δημιουργημένων αρχείων για να σώσουν τα ανακτημένα στοιχεία δημιουργούνται έτσι ώστε στους πρώτους τρεις χαρακτήρες των αρχείων δίνεται ο PTT από το strcat(path, "\\Ptt") λειτουργία. Γίνεται έτσι για να αποφύγει τα διπλά ονόματα αρχείων στον κατάλογο προορισμού. Επομένως τα ονόματα αρχείων των ανακτημένων αρχείων δίνονται με το σχήμα “PTTxxxxx.DOC”
Το show_hide_cursor λειτουργίας (32 ..0) χρησιμοποιείται για να κρύψει το δρομέα από την οθόνη όπου show_hide_cursor (6 ..7) ανακτά το δρομέα πίσω στην οθόνη.
Τα readabsolutesectors λειτουργίας (0x81, βρόχος, 1, απομονωτής) Διαβάζει έναν τομέα του δεύτερου φυσικού σκληρού δίσκου που διευκρινίζεται από το βρόχο αριθμού τομέα.
Εάν η επιγραφή του αρχείου βρίσκεται, start_file = περιτυλιχτείτε θέτει τον start_file στον αρχικό αριθμό τομέα του αρχείου που ανακτάται. Το πρόγραμμα ακολουθεί τους τρεις όρους που δίνονται έπειτα, για να βρούν τον τελειώνοντας τομέα του αρχείου:
- Εάν το μέγεθος αρχείων φθάνει μέχρι το μέγιστο μέγεθος 5MB
- Εάν η υποσημείωση του αρχείου εγγράφου βρίσκεται
- Εάν μια άλλη επιγραφή βρίσκεται
Ο μακρύς ακέραιος αριθμός end_file τίθεται τον τελειώνοντας αριθμό τομέα του αρχείου από το end_file=loop εάν οποιοσδήποτε όρος από τα τρία είναι ικανοποιημένος. Τώρα το στοιχείο των τομέων, που αρχίζει από τον αριθμό τομέα start_file στον αριθμό τομέα end_file σώζεται στο αρχείο με τη λειτουργία Recover_the_file( ).
|
page 1 | 2 | 3 | 4 | 5 | 6 |
|
|
|