Γράψιμο ενός προγράμματος για την ακατέργαστη αποκατάσταση αρχείων
Η κωδικοποίηση του προγράμματος για την ακατέργαστη αποκατάσταση αρχείων των αρχείων Microsoft Word (. επέκταση εγγράφου) έχει δοθεί έπειτα. Οι αναζητήσεις προγράμματος των αρχείων στους τομείς του δίσκου και σώζουν το ανακτημένο αρχείο αυτόματα με να δημιουργήσουν το όνομα του αρχείου αυτόματα.
Η πορεία που διευκρινίζεται από το χρήστη για να σώσει τα αρχεία χρησιμοποιείται ως πορεία προορισμού για να σώσει τα ανακτημένα στοιχεία. Εάν ο κατάλογος προορισμού δεν υπάρχει, το πρόγραμμα μπορεί να δημιουργήσει τον προορισμό μέχρι ένα επίπεδο καταλόγου.
Το πρόγραμμα αποκατάστασης που δίνεται εδώ υποστηρίζει ακόμη και τους μεγάλους δίσκους μεγέθους στην αναζήτηση και ανακτεί τα στοιχεία. Το πρόγραμμα έχει γραφτεί για να ψάξει τα στοιχεία στο δεύτερο φυσικό σκληρό δίσκο.
/* Ακατέργαστο πρόγραμμα αποκατάστασης αρχείων για να ανακτηθούν τα αρχεία Microsoft Word */
#include<stdio.h>
#include<dos.h>
/* Δομή που χρησιμοποιείται από την getdrivegeometry λειτουργία
χρησιμοποίηση της επέκτασης INT 13H, αριθμός λειτουργίας 0x48. */
struct geometry
{
unsigned int size ; /* (call) size of Buffer */
unsigned int flags ; /* Information Flags */
unsigned long cyl ; /* Number of Physical
Cylinders on Drive */
unsigned long heads ;/* Number of Physical
Heads on Drive */
unsigned long spt ; /* Number of Physical
Sectors Per Track */
unsigned long sectors[2] ; /* Total Number of
Sectors on Drive */
unsigned int bps ; /* Bytes Per Sector */
} ;
/* Δομή του σχήματος πακέτων διευθύνσεων δίσκων, που χρησιμοποιείται από τη λειτουργία readabsolutesectors */
struct diskaddrpacket
{
char packetsize ; /* Size of Packet, generally 10H */
char reserved ; /* Reserved (0) */
int blockcount ; /* Number of Blocks to Transfer */
char far *bufferaddress ; /* address to Transfer
Buffer */
unsigned long blocknumber[2] ; /* Starting Absolute
Block Number */
} ;
///// Λειτουργία για να πάρει τις παραμέτρους Drive \\\\\
unsigned long getdrivegeometry (int drive)
{
union REGS i, o ;
struct SREGS s ;
struct geometry g = { 26, 0, 0, 0, 0, 0, 0, 0 } ;
i.h.ah = 0x48 ; /* Function Number 0x48 */
i.h.dl = drive; /* Drive Number */
i.x.si = FP_OFF ( (void far*)&g ) ;
s.ds = FP_SEG ( (void far*)&g ) ;
/* Επικαλεσθείτε το διευκρινισμένο αριθμό λειτουργίας του INT 13H
επέκταση με τις τιμές καταλόγων τμήματος */
int86x ( 0x13, &i, &o, &s ) ;
printf("\n Head = %lu, Sectors Per Track = %lu, Cylinder = %lu\n",
g.heads,g.spt,g.cyl);
/* Εάν πάρτε η λειτουργία γεωμετρίας κίνησης αποτυγχάνει, μήνυμα λάθους επίδειξης και έξοδος */
if(g.spt==0)
{
printf("\n Get Drive Geometry Function Fails....");
printf("\n Extensions Not Supported, Press any Key to
Exit...");
getch();
exit(1);
}
return *g.sectors; /* Return The Number of
Sectors on Drive */
}
unsigned long file_size=0, i=0;
unsigned long start_file=0, end_file=0;
unsigned long Sectors_in_HDD2=0, loop=0;
char buffer[512], filename[80], temp[8];
char path[80];
unsigned int result,num=0;
|
page 1 | 2 | 3 | 4 | 5 | 6 |
|
|
|