Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ifstream未创建和打开文件以进行输出 我在C++上使用NUBETES 6.9在Ubuntu 11.04上开发。我已经声明了输入和输出文件名字符串和文件流 ifstream fpInputFile, fpOutputFile; string inputFileName="", outputFileName="";_C++_Netbeans 6.9_Ubuntu 11.04_Ifstream - Fatal编程技术网

ifstream未创建和打开文件以进行输出 我在C++上使用NUBETES 6.9在Ubuntu 11.04上开发。我已经声明了输入和输出文件名字符串和文件流 ifstream fpInputFile, fpOutputFile; string inputFileName="", outputFileName="";

ifstream未创建和打开文件以进行输出 我在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

输入文件名被指定为现有文件的名称,作为应用程序的输入参数。输出文件名与输入文件名相同,只是在最后一个句点之前插入了“\u output”。因此,输出被写入与输入所在的目录相同的目录。我也开始使用netbeans

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修复了该问题。再次感谢。