大きなファイルに書き込もうとしていますが、2GB を超えるファイルではうまくいかないようです。私はboost::iostreams::file_sinkで試しました。これは単にブースト ストリームの制限ですか? Win64 と win32 で大きなファイルを書き込める他の方法はありますか?
3108 次
3 に答える
9
これは以下に依存します。
- 使用しているファイル システム。FAT などの古いファイル システムでは、最大 2GB のファイルしか使用できません。NTFS を使用します。
- 大きなファイルを許可するようにライブラリをコンパイルする必要があります (64 ビットのシーク オフセット)。32 ビット int を使用してファイルをシークする場合 ("seek" および "tell" 呼び出しの引数と結果を確認してください)、2GB にしかアクセスできません (2^31 ビット、32 番目は符号 +/- です)。
これも役立つかもしれません: http://www.boost.org/doc/libs/1_37_0/libs/iostreams/doc/faq.html#offsets
于 2008-11-19T14:59:52.890 に答える
6
Win32/64 では、ReadFile と WriteFile は 4GB を超えるファイルを書き込むことができます。配置は、 SetFilePointerExの 64 ビット _LARGE_INTEGER 値を介して行われます。同様に、ファイル サイズを取得するには、基本的な GetFileSize ではなく、GetFileSizeExが必要です。
于 2008-11-19T15:13:24.877 に答える
1
NTFSでは、実際の制限はボリュームのサイズだけです。これをテストする場合は、コマンドラインを使用してダミーファイルを作成できます
。fsutilfile createnew [filename] [validdatalength]
例:
fsutil file createnew TestFile.bin 65536000000
NTFSボリュームがあると仮定すると、64GBのファイルが作成されます。
于 2008-11-19T16:34:20.733 に答える