2011-12-14 13 views
1

CreateFile()Windows APIを使用してファイルを作成/開いています。ドライブに不良セクタがあり、ファイルを開くことができないか、このファイルへの書き込みが失敗したとします。 同じCreateFile()APIを使用してファイルを再作成する場合、以前のドライブと同じメモリ上に作成されます(したがって、不良セクタが再度存在する)か、別のメモリが選択されますOSと私は悪いセクターを避けるチャンスがありますか?CreateFileとメモリ管理

私の質問は、ファイルがCreateFile()関数で作成されたときにWindowsが物理ドライブにメモリを割り当てる方法ですか?

+1

新しいAPI呼び出しで新しいハンドルが生成されます。このAPIは、物理ドライブ上のアクセスと配置を指定するのに十分な低レベルではありません。 Windowsは、まず最初に不良セクタに書き込むべきでない理由を判断します。実際に解決しようとしている問題は何ですか? – AJG85

+0

私のソフトウェアでは、ファイルへの書き込みに何か問題が発生した場合に対応しています。これは、物理ドライブの故障の場合や不良セクタの場合があります。不良セクタの場合は、ファイルを再作成して再度書きたいと思っています。質問は、私が新しい作成されたファイルで再び同じ不良セクターにヒットしないという可能性はありますか? – ViP

+1

人は通常、良いファイルシステムを使ってこの問題を解決します。 NTFSは自動的に不良セクタを検出してフラグを立てます。また、データを回復し、別の(良い)セクターに保管しようとします。 FATの場合、 'chkdsk/r'はセクタを悪いとマークし、Windowsは自動的にそれらを避けます。データの破損を心配する特別な理由はありますか?私は、RAIDを使用することを提案したり、ネットワークを介して複製したり、最後の手段では、ローカルにデータを2回書き、チェックサムに依存します。 – jweyrich

答えて

1

CreateFileは、失敗した場合はINVALID_HANDLE_VALUEを返します。

MSDNによれば、理由を調べるにはGetLastErrorに電話してください。