2009-06-30 23 views

答えて

8

ios::nocreate標準C++の一部ではありません - どのようなあなたはそれが何を期待していますか?

編集:グーグルから、それが存在しない場合は作成されたファイルを防ぐために意図されたように、それはそうです。これはとにかくifstreamsのデフォルトですので、あなたが言うだけのことができます。

ifstream f(filename); 
if (! f.is_open()) { 
    // open failed - probably because infput file does not exist 
} 
+0

私は、オープンソースパッケージを構築していて、このエラーが投げられています。あまりサポートしていないので、知りたがっています。 –

+0

「イオス:: NOCREATEは、標準C++の一部ではありません - あなたがそれを行うことを期待しています?」 - 真剣に? – jww

+0

それは競合状態が導入されましたので、これは、問題がある:別のプロセスは2つのオープン文の間でファイルを作成することができます。 – xophos

7

リードモード(ios::in)でファイルを開くと、それが存在しない場合は、それを作成しません。非標準のnocreateを離れることができます。そしてin以来ifstreamのデフォルトです:あなたは、関数fopenとO_CREAT使用してファイルハンドルとしてファイルを開くことができます

ifstream tempStr (argv[4]); 
+0

これはraceconditionを導入するため、問題があります。別のプロセスが2つのopenステートメントの間にファイルを作成する可能性があります。 – xophos

0

| O_EXCLをしてから使用してストリームに変換するには、

__gnu_cxx::stdio_filebuf<char> filebuf(posix_handle, std::ios::out); 
    ostream os(&filebuf); 

これは、非標準を使用しています拡張子はで定義されます。 誰かがより良い解決策を持っているなら、私は本当に知りたい!

関連する問題