Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.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
C++ c++;ofstream指针无法写入磁盘_C++_Pointers_Flush_Ofstream - Fatal编程技术网

C++ c++;ofstream指针无法写入磁盘

C++ c++;ofstream指针无法写入磁盘,c++,pointers,flush,ofstream,C++,Pointers,Flush,Ofstream,我在写流指针的时候遇到了麻烦,这让我很困惑,因为我真的看不到任何遗漏的东西了。注意,这是这个问题的后续: 我的代码如下: std::vector<shared_ptr<ofstream>> filelist; void main() { for(int ii=0;ii<10;ii++) { string filename = "/dev/shm/table_"+int2string(ii)+".csv"; filelist.push_

我在写流指针的时候遇到了麻烦,这让我很困惑,因为我真的看不到任何遗漏的东西了。注意,这是这个问题的后续:

我的代码如下:

std::vector<shared_ptr<ofstream>> filelist;

void main()
{
  for(int ii=0;ii<10;ii++)
  {
     string filename = "/dev/shm/table_"+int2string(ii)+".csv";
     filelist.push_back(make_shared<ofstream>(filename.c_str()));
  }

  *filelist[5]<<"some string"<<endl;
  filelist[5]->flush();
  exit(1);

}
std::向量文件列表;
void main()
{

对于(int ii=0;ii我会尝试:
(*filelist[5])在调用
exit
filelist[5]->close()之前尝试关闭文件
。您中止了一个打开文件的进程,这意味着您的写入可能没有进入操作系统缓冲区,或者在进程退出时被丢弃。您也可以删除退出调用,这可能会解决问题。中止进程的IO结果很难确定,因此最好尝试避免使用活动IO中止,或者假设任何活动IO在中止时都会失败。

为什么
std::vector
而不是simple
std::vector
?@LihO您无法复制ofstream,因此无法直接执行ofstream的向量。使用共享的ptr而不是原始指针可以节省手动删除资源的时间。还有其他方法可以降低成本,但对于一个包含10项的向量其实并不重要。所以我使用exit提前结束执行,是否应该使用一些东西来代替exit?我改为上面的建议,但似乎没有改变代码的行为。不幸的是,仍然没有编写任何内容。@user788171您没有提前结束执行。您已经结束了已经有了
main()
。在我设计的示例中,我没有输入exit()之后的其余代码,其目的是为了这个测试的目的而退出执行。当我推回ofstream时是否需要新的吗?@user788171:当您使用共享的ptr时,它不应该是。我只是将它用作获取独立代码的简单方法。所以我尝试调用close()这并没有改变任何事情。不幸的是,这是在回调函数中,我不确定有什么方法可以优雅地退出该函数。@user788171-Hmm,除了在退出之前关闭文件之外,您发布的代码中似乎没有任何东西表明您为什么会有这种行为。您所访问的文件是否有特殊权限重新写入?它们是在挂载目录中还是在afs之类的共享系统下?
#include <fstream>
#include <string>
#include <vector>

std::vector<std::ofstream *> filelist;

int main() {
  for(int ii=0;ii<3;ii++)
  {
    char *names[] = {"one", "two", "three"};
     std::string filename = "c:\\trash_";
     filename += names[ii];
     filename += ".txt";
     filelist.push_back(new std::ofstream(filename.c_str()));
  }

  for (int i=0; i<filelist.size(); i++) {
    (*filelist[i])<<"some string\n";
    filelist[i]->close();
  }
}