11

CreateFilevs fopenvs ofsteam-長所と短所?

CreateFile は強力ですが、Windows 専用だと聞きました。
(Windows で) 何を使用すればよいか、またその理由を教えてください。

4

6 に答える 6

8

それはあなたが何をしているかによります。テキスト ファイルをシーケンシャルに読み書きするには、間違いなく iostream が最適です。トランザクション セキュリティまたは非標準デバイスに関連するものについては、システムに直接アクセスする必要があります (CreateFileまたはopen)。その場合でも、テキストを順次読み書きする場合は、独自の を定義し、streambufそれを iostream で使用するのが最善の解決策です。

どこfopenが好ましいかという文脈は考えられません。

于 2012-05-28T09:27:44.780 に答える
4

Windows ファイル関数によって提供される機能 (オーバーラップ I/O など) が必要でない限り、私の提案は、C++ の iostream か、C のFILE(fopenおよびその仲間) を使用することです。

移植性が向上するだけでなく、テキスト ファイルに書式付き入力/出力を使用することもできます。C++ の場合、クラスの出力/入力演算子を簡単にオーバーロードできます。

于 2012-05-28T09:24:24.207 に答える
3

Windows ファイルメモリ マッピングを使用する場合は、使用する必要がありますCreateFile(たとえば、CreateFileMapping APIにHANDLE渡される値は の戻り値です)。さらに、C および C++ 標準ファイル API よりも高度なカスタマイズ オプションを提供します。CreateFileCreateFile

ただし、移植可能なコードを記述したい場合、または Windows 固有の機能が必要ない場合は、C および C++ 標準ファイル API で問題ありません。いくつかのテストでは、大きなデータを処理するときに、C++ I/O ストリームと生の C ファイル API のパフォーマンス オーバーヘッドに気付きました。このような場合は、生の C ファイル API を C++ RAII クラスでラップするだけで、それを C++ コードで使用できます。

于 2012-05-28T09:34:54.210 に答える
2

OS API 関数 ( など) によって提供される追加機能が絶対に必要でない限りCreateFile、標準ライブラリ関数 (fopenまたは などofstream) を使用することをお勧めします。これにより、プログラムの移植性が向上します。

私が考えることができる使用の唯一の本当の利点は、CreateFile重複した I/O と、おそらくより細かいアクセス権です。

于 2012-05-28T09:31:40.130 に答える
1

ほとんどの場合、C で fopen を使用するか、C++ で ofstream を使用する方が適切です。CreateFile を使用すると、共有とキャッシュをさらに制御できますが、書式設定機能は提供されません。

于 2012-05-28T09:22:11.693 に答える