/*スクリーンのカーソルを隠し、示す機能*/
show_hide_cursor ( 32, 0 );
gotoxy(15,18);cprintf("[ %d ] Files Recovered...",
num);
/* ディスクの終りのセクターまでのデータのための調査 */
while(loop<Sectors_in_HDD2)
{
/* 1つのセクター(セクターのNOを読みなさい。 =ループ) */
readabsolutesectors ( 0x81, loop, 1, buffer );
gotoxy(19,16);cprintf("Scanning Sector Number = % ld",
loop);
if(kbhit())
{
show_hide_cursor ( 6, 7 ); /* 取り出しなさい 出口の前のカーソルプログラム
*/
exit(0);
}
/* 指定されたらヘッダーはある */
if((memcmp ( buffer, header,7))==0)
{
/* 自動的にファイルを回復されたデータを救うために作成するようにファイル名前を提供する論理 */
strcpy(filename, path);
itoa(num,temp,10);
strcat(filename, temp);
strcat(filename,".DOC");
start_file=loop; /* ファイルのセクターの開始 */
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;
}
/* DOCファイルのフッターがあれば */
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();
}
}
コーディングのコメント:
INT 13H延長、機能数0x48を使用してgetdrivegeometry機能によって構造の幾何学がディスクの様々な変数を得るのに使用されている。
構造のdiskaddrpacketはディスク住所包みのフォーマットのため、readabsolutesectors機能によって使用されるためにである。
getdrivegeometry機能は(intドライブ)指定した物理的なドライブ数ドライブをディスクのドライブ変数を得ることである。
(木炭の) peekb (0x0040、0x0075)が区分0040Hによって表される記憶場所で貯えられるコンピュータに接続されるハードディスクの数を見つけるのに使用されている: オフセット0075H。 付すハードディスクの総数がより少しそれから2表示したらエラーメッセージをおよび出なさい。
Sectors_in_HDD2=getdrivegeometry (0x81); 第2物理的なハードディスク(0x81)およびリターンの様々な変数をディスクのセクターの総数見つける。
声明(アクセス(道、0)! = 0は)ユーザーが与える道の入手の可能性を点検する。 転送先ディレクトリがなければ、行先は1つのレベルまである特定の道が条件によってかどうか点検したら、そして作成される(mkdir (道)! =0は)違法、エラーメッセージ表示されるである。
回復されたデータを救う自動的に作成済ファイルのファイル名前はファイルの最初の3つの特性がstrcat (道、「\ \ ptt」)によってpttを与えられることそのような物作成される; 機能。 転送先ディレクトリの重複したファイル名前を避けることをそうする。 従って回復されたファイルのファイル名前は「PTTxxxxx.DOC」のフォーマットで与えられる
機能show_hide_cursor (32、0); show_hide_cursor (6、7)スクリーンからカーソルを隠すのに使用されている; スクリーンに戻ってカーソルを取り出す。
機能readabsolutesectors (0x81のループ、1の緩衝); セクター数ループによって指定される第2物理的なハードディスクの1つのセクターを読む。
ファイルのヘッダーがあれば、=ループstart_file; 回復されるべきファイルのセクター数の開始にstart_file置く。 プログラムはファイルの終りのセクターを見つけるために次に与えられる3つの条件に続く:
- ファイルサイズが5MBの最高のサイズまで達すれば
- DOCファイルのフッターがあれば
- 別のヘッダーがあれば
end_file長い整数はend_file=loopによってファイルの終りのセクター数に置かれる; 3からのどの1つの条件でも満足すれば。 end_file機能Recover_the_fileのファイルにセクター数にstart_fileセクター数から始まってセクターの今データは、救われる()。
|
page 1 | 2 | 3 | 4 | 5 | 6 |
|
|
|