在C+中读取多个文件+;使用相同的fstream对象 我用C++代码处理下面两个不同的文件,好像我失败了两次读到了,FFASH对象有两个限制,两个读取多个文件? fstream fin("file1.txt"); //operation fin.close(); fin.open("file2.txt");//failed

在C+中读取多个文件+;使用相同的fstream对象 我用C++代码处理下面两个不同的文件,好像我失败了两次读到了,FFASH对象有两个限制,两个读取多个文件? fstream fin("file1.txt"); //operation fin.close(); fin.open("file2.txt");//failed,c++,file-io,fstream,C++,File Io,Fstream,试着这样做: #include <iostream> #include <fstream> int main() { const char* const files[] = { "file1.txt", "file2.txt", "file3.txt" }; size_t sz = sizeof(files) / sizeof(files[0]); std::fstream fin; for(size_t i = 0; i < sz; +

试着这样做:

#include <iostream>
#include <fstream>

int main() {

   const char* const files[] = { "file1.txt", "file2.txt", "file3.txt" };
   size_t sz = sizeof(files) / sizeof(files[0]);
   std::fstream fin;
   for(size_t i = 0; i < sz; ++i) {
      fin.open(files[i], std::ios_base::out);
      // do something
      fin << "123\n";
      fin.close();
   }
   return 0;
}
#包括
#包括
int main(){
常量字符*常量文件[]={“file1.txt”、“file2.txt”、“file3.txt”};
size_t sz=sizeof(文件)/sizeof(文件[0]);
标准::流鳍;
对于(尺寸i=0;ifin关闭文件后,必须调用.clear()方法打开具有相同对象的新文件。

将文件流与文件重新关联完全可以。失败的原因可能有很多:文件是否存在?您有权限打开它吗?您是否可以尝试只指定
std::ios::in
而不是将其保留为默认值,即
std::ios::in | std::ios::out
?我这样问是因为gcc 4.8.1和4.9.X在两者都被指定时失败了:让我们试着指定一个,看看它是否有效?@Brandon它失败了,因为
std::ios_base::in
阻止创建一个不存在的文件。将其替换为
std::ios_base::out
将修复这一问题,但您将丢失输入功能。这将是错误的tter将
std::ios_base::trunc
附加到openmode。是的,如果我先切换参数,比如file2.txt,file1.txt将不可访问。在C++11之前,您的流不能确保在
打开
中将内部标志重置为
goodbit
,这些标志需要在重新打开之前清除
,原因是什么编译时使用的标准?此方法仍然失败@郑穗展 它以什么方式失败?发生了什么?您有目录的权限吗?是的,因为如果我切换两个参数的顺序,file1.txt将无法打开,我使用if(!fin)知道它失败了@郑穗展 您没有完全按照上面的方式使用代码。如果您这样做,您就不会遇到这个问题。