ifstream未创建和打开文件以进行输出 我在C++上使用NUBETES 6.9在Ubuntu 11.04上开发。我已经声明了输入和输出文件名字符串和文件流 ifstream fpInputFile, fpOutputFile; string inputFileName="", outputFileName="";
输入文件名被指定为现有文件的名称,作为应用程序的输入参数。输出文件名与输入文件名相同,只是在最后一个句点之前插入了“\u output”。因此,输出被写入与输入所在的目录相同的目录。我也开始使用netbeansifstream未创建和打开文件以进行输出 我在C++上使用NUBETES 6.9在Ubuntu 11.04上开发。我已经声明了输入和输出文件名字符串和文件流 ifstream fpInputFile, fpOutputFile; string inputFileName="", outputFileName="";,c++,netbeans-6.9,ubuntu-11.04,ifstream,C++,Netbeans 6.9,Ubuntu 11.04,Ifstream,输入文件名被指定为现有文件的名称,作为应用程序的输入参数。输出文件名与输入文件名相同,只是在最后一个句点之前插入了“\u output”。因此,输出被写入与输入所在的目录相同的目录。我也开始使用netbeans su netbeans 因此IDE具有目录的根权限。我尝试打开这些文件,并检查它们是否是这样打开的 fpInputFile.open(inputFileName.c_str(), ifstream::in); fpOutputFile.open(outputFileName.c_str
su netbeans
因此IDE具有目录的根权限。我尝试打开这些文件,并检查它们是否是这样打开的
fpInputFile.open(inputFileName.c_str(), ifstream::in);
fpOutputFile.open(outputFileName.c_str(), ifstream::out);
if (!(fpInputFile.is_open())) throw ERROR_OPENING_FILE;
if (!(fpOutputFile.is_open())) throw ERROR_OPENING_FILE;
输入文件已成功打开,但输出文件未成功打开
如果您能帮助确定输出文件未打开写入的原因,我们将不胜感激。将输出文件声明为流的
而不是ifstream
您还可以对输入和输出文件使用fstream
。将输出文件声明为流的而不是ifstream
您还可以对输入和输出文件使用fstream
。明显的问题是,您可能打算使用std::ofstream
而不是std::ifstream
打开文件。这有助于实际写入流,尽管有一些方法可以写入std::ifstream
,只要它是打开读取的。例如,您可以直接使用std::streambuf
接口,或者使用std::streambuf
来构造和std::ostream
更有趣的问题是:当打开模式使用std::ios_base::in | std::ios_base::out
时,为什么不打开文件进行写入std::ifstream
自动在中添加std::ios\u base::in
。事实证明,模式std::ios_base::in | std::ios_base::out
不会创建文件,但会成功打开现有文件。如果您确实希望使用std::ifstream
打开可能不存在的输出文件,则需要使用std::ios_base::out | std::ios_base::trunc
或std::ios_base::out | std::ios_base::app
:
- 前者将强制创建或截断文件(如果存在)
- 后者在所有情况下都会强制将写操作附加到文件中
然而,我个人的猜测是,您最好只使用std::ofstream
,或者,如果您想打开文件进行读写std::fstream
(但是,如果不存在文件,还需要添加std::ios_base::trunc
或std::ios_base::app
,以创建文件).明显的问题是,您可能打算使用std::ofstream
而不是std::ifstream
打开文件。这有助于实际写入流,尽管有一些方法可以写入std::ifstream
,只要它是打开读取的。例如,您可以直接使用std::streambuf
接口,或者使用std::streambuf
来构造和std::ostream
更有趣的问题是:当打开模式使用std::ios_base::in | std::ios_base::out
时,为什么不打开文件进行写入std::ifstream
自动在中添加std::ios\u base::in
。事实证明,模式std::ios_base::in | std::ios_base::out
不会创建文件,但会成功打开现有文件。如果您确实希望使用std::ifstream
打开可能不存在的输出文件,则需要使用std::ios_base::out | std::ios_base::trunc
或std::ios_base::out | std::ios_base::app
:
- 前者将强制创建或截断文件(如果存在)
- 后者在所有情况下都会强制将写操作附加到文件中
然而,我个人的猜测是,您最好只使用std::ofstream
,或者,如果您想打开文件进行读写std::fstream
(但是,如果不存在文件,还需要添加std::ios_base::trunc
或std::ios_base::app
,以创建文件).您知道ifstream
中的i
代表输入,是吗?啊!这就是问题所在。我没有意识到我代表的是投入。我用o替换了它,解决了这个问题。非常感谢!您知道ifstream
中的i
代表输入,是吗?啊!这就是问题所在。我没有意识到我代表的是投入。我用o替换了它,解决了这个问题。非常感谢!非常感谢。用o替换i修复了该问题。再次感谢,非常感谢。用o替换i修复了该问题。再次感谢。