- 締切済み
連続した領域への書き出し
Windows XP + SDKで開発を行っています。 ハードディスクへファイルを書き出すときに 強制的に連続した領域に書き出すことは可能でしょうか? ディスク上でファイルが分割されてアクセス速度が低下するのを 避けたいのです。 宜しくお願いします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- titokani
- ベストアンサー率19% (341/1726)
>8MB程度のファイルを書き出す際に、例えば事前に連続した8MBの領域をディスク上に確保して、 >そこに書き出す事は出来ないか 1.適当な内容で、8Mバイトのファイルを作る 2.デフラグを行う。 3.1.で作ったファイルに対して上書きでアクセスする。 で、なんとかいけるかも。 マップトファイルなら多分大丈夫だと思いますが、fopenでa+とかでもいけるかも。 確実な話ではありませんので、実験は必要かと思います。
- zwi
- ベストアンサー率56% (730/1282)
>デフラグのソフトなどはそういった方法でデフラグを実現しているのでしょうか? そうなりますね。 NTFSのバージョンごとに違いとか、FAT32のディスクの場合とか全てデフラグのアプリ側で処理していると思います。 ともかく、WindowsAPIの高水準I/Oのレベルでファイルの連続領域の制御をする関数を私は知りません。 なので、低水準I/Oのレベルで制御するしか無いと思われます。 ↓こんなのを使います。 CreateFile 関数 http://msdn.microsoft.com/ja-jp/library/cc429198.aspx DeviceIoControl関数 http://msdn.microsoft.com/ja-jp/library/cc429164.aspx
お礼
回答ありがとうございます。 非常に参考になりました。 今後も宜しくお願いします。
- zwi
- ベストアンサー率56% (730/1282)
>目的はボリュームサイズ等をいじる事ではなく、8MB程度のファイルを書き出す際に、例えば事前に連続した8MBの領域をディスク上に確保して、そこに書き出す事は出来ないかと思い質問しました。 それを行うためには物理ディスク・ボリュームを直に制御するしかありません。
お礼
早速の回答ありがとうございました。 なるほど、そういう事ですか。 デフラグのソフトなどはそういった方法でデフラグを実現しているのでしょうか?
- zwi
- ベストアンサー率56% (730/1282)
HDDの物理ディスク・ボリュームをWindowsAPIでコントロールすることは可能です。ただ、HDDやファイルシステムに関する深い知識が無い限り、HDDを論理破壊する可能性がすごく高いです。私には怖くて扱えません。
お礼
回答ありがとうございます。 目的はボリュームサイズ等をいじる事ではなく、8MB程度のファイルを書き出す際に、例えば事前に連続した8MBの領域をディスク上に確保して、 そこに書き出す事は出来ないかと思い質問しました。
- digitalian
- ベストアンサー率29% (323/1104)
Windows XP OS の機能としてHDDに記録する以上、HDDは Windows の管理下にあるため、不可能だと思います。
お礼
回答ありがとうございます。 現在書き出したファイルにフラグメントが発生していて困っているので 何か方法はないかと思って質問した次第です。
お礼
回答ありがとうございます。 いつもCreateFileでやってましたが一度挑戦してみます。