2011-01-01 8 views
1

私は位置を設定するときにちょうど良いSetFilePointerExを使用することができました。SetFilePointerExを使用して物理ディスクの最後に移動するにはどうすればよいですか?

SetFilePointerEx(PD, 512, @PositionVar, FILE_BEGIN); 
SetFilePointerEx(PD, 0, @PositionVar, FILE_CURRENT); 

両方とも動作します。私はポジションを設定し、現在のポジションをチェックすることさえできます。しかし、を2番目のパラメータが何であるかにかかわらずドキュメントごとに設定した場合、3番目のパラメータのポインタを提供するかどうかは、多くの他の操作が失敗せずに有効なハンドルであっても失敗します。例えば

:私は置くものは何でも

SetFailed := SetFilePointerEx(PD, 0, @PositionVar, FILE_END); 
SetFailed := SetFilePointerEx(PD, 0, nil, FILE_END); 

、それが失敗します。私は物理ディスクのハンドルを使って作業しています。 SetFilePointerはうまく動作しますが、私が望むよりもちょっとしたトラブルです。

これは世界の終わりではありませんが、何が起こっているのですか?

+0

ニース編集簿、タイトルは必ずしも正しいとは限りません。私は物理的なメディアからのスペースの量を取得しようとしていた。理論的にはこの方法で行うことができますが、もはや有効な方法ではありません。誰かがこの特定のQ&Aセッションから何か助けを見つけることに疑いがあるにもかかわらず、私は古いタイトルで問題を誰かのための用語を検索しますが、私は投稿をきれいに感謝します。投票した人のおかげで、私は最終的に投票することができます:) – SuicideClutchX2

+0

@Suicide、あなたはこの質問を持っている答えを読んでください:http://stackoverflow.com/questions/4567422/私はすでにあなたにSetFilePointerは動作しないと言ったFILE_ENDとディスクデバイスでは、int64を使用してファイルポインタをどこにでも移動できるルーチンを提供しました。デビッドは、Hackyコードを使用せずにデバイスサイズを取得する優れた方法を示しました。なぜ同じ質問をもう一度する必要がありますか? –

+0

は改正前の方が良かった –

答えて

3

あなたが知っている通りにこれを行うことはできません。あなたは、最初から、または現在から求めなければなりません。 DeviceIoControlを使用して、デバイスのサイズを調べます。

+0

それは私が取り組むつもりだったし、あなたが以前にそれを指摘していただきありがとうございます。私はあなたが同じ道のように見えるものを守るために私を叩きたいと思った。 Microsoftは失敗した、ああ、ニュースではない待つ。それが私に許されるとき、答えは数分で除外されます。 – SuicideClutchX2

+0

@suicideもしそれが非元のバージョンで動作するなら、なぜそれを使わないのですか?私がリンクしているGpHugeFileユニットは、あなたにそれを働かせる方法の例を与えます> 2GBの –

+0

私はユニットを見るでしょう、私は前にその1ページを見ました。私は、SetFilePointerを使って高次と低次の数字の概念を少し問題にし、それらを64ビット変数に結合する方法で、終了値を読み取ることができます。私はビットレベルでそれを理解するだけで、それを理解することはできません理解...しかし、私はします。 – SuicideClutchX2

関連する問題