のVisual Studioのバージョンでは、両方が(利用可能なフラグのリストについて_fsopen()
を参照してください)「ファイル保護/共有フラグ」を指定するための追加のオプション_Prot
のパラメータを持っていることを非標準のコンストラクタと非標準open()
過負荷を持っています。ただし、delete
共有はサポートされているフラグの1つではありません。
しかし、代わりがあります。 Visual Studioのバージョンstd::ifstream
とstd::ofstream
には、ファイルアクセスのためにFILE*
を受け入れる非標準のコンストラクタがあります。 Microsoft以外のコンパイラへの移植性の何かが必要な場合は
Can I use CreateFile, but force the handle into a std::ofstream?
HANDLE file_handle = CreateFile(...,FILE_SHARE_DELETE,...);
int file_descriptor = _open_osfhandle((intptr_t)file_handle, _O_RDONLY);
FILE* file = _fdopen(file_descriptor, "r");
std::ifstream stream(file);
...
// Closes stream, file, file_descriptor, and file_handle.
stream.close();
:あなたは(エラー処理を簡潔にするため削除)例えば、Microsoftの_open_osfhandle()
と_fdopen()
機能を使用してFILE*
にCreateFile()
からHANDLE
をラップすることができますカスタムstd::basic_streambuf
クラスを作成するか(std::filebuf
から派生した)、HANDLE
をラップして、そのクラスのオブジェクトをstd::basic_istream
コンストラクタに直接渡す必要があります。
携帯型ではできません。 –
私が必要としたら、 'ifstream'を既存のC' FILE'ハンドルまたはファイル番号でオープンする方法を見ていきます。これはAPIレベルハンドルに対応します。たぶん –
いくつかのコンパイラ(例えば 'GCC')はすぐに標準の*ファイルシステム*ライブラリを' Technical Specification'として提供します。 [std :: experimental :: filesystem :: remove](http://en.cppreference.com/w/cpp/experimental/fs/remove)を使用することができます。さもなければ 'boost 'に同じ(または類似の)ライブラリがあります。 – Galik