私の質問は、このファイル(非常に重要)が小さい(1クラスタ未満、わずか数バイト)場合、ファイルディスクオフセットを取得する方法です。NTファイルシステム上の非常に小さなファイルでFSCTL_GET_RETRIEVAL_POINTERSエラーが発生しました
現在、私は、このWindows API関数を使用します。
DeviceIOControl(FileHandle, FSCTL_GET_RETRIEVAL_POINTERS, @InBuffer, SizeOf(InBuffer), @OutBuffer, SizeOf(OutBuffer), Num, Nil);
FirsExtent.Start := OutBuffer.Pair[0].LogicalCluster ;
それはクラスタよりも大きいファイルを完璧に動作しますが、それは常にオフセットヌルを返すよう、それだけで、小さなファイルで失敗します。
小さなファイルではどのような手順を実行しますか? NTFSボリューム上のどこに配置されていますか?ファイルのオフセットを知る別の方法がありますか?この細分性はどこにも書かれていないようです。
注:質問はDelphiとしてタグ付けされていますが、C++のサンプルや例も同様に評価されます。
サポートされているファイルシステムでは、FSCTL_GET_RETRIEVAL_POINTERS操作では、非居住者データのエクステントの場所が返されます。常駐データにはエクステントの場所が決してありません。 – wj32
ああ、私は迷惑な質問をする衝動を感じる "なぜ?" – OnTheFly
":"私の16進エディタにディスクエディタがあり、特別なファイルエクスプローラ(DeviceIOControlを使用)と組み合わせて、ボリューム編集時に何を編集しているかを知ることができます(cf. http://www.iceberg-softwares .com/blog/index.php?カテゴリ= 1) – az01