【发布时间】:2022-01-24 05:27:24
【问题描述】:
有一个与此类似的问题,但没有得到回答。
我正在尝试创建std::ofstream 对象的映射,但我无法构建代码。
到目前为止我已经尝试过
//std::map<std::string, std::ofstream> my_files; //this fails
std::map<std::string, std::ofstream& > my_files;
for(auto & member: members){
filename=GetFileName();
//create the file
std::ofstream thefile(filename);
my_files[member.first]=thefile;
}
//Here I use the ofstreams in the map to write etc
我尝试了第一行(注释),得到了this error。使用已删除的功能。所以我把它改成上面的那行,但我仍然得到同样的错误错误:use of deleted function ‘std::basic_ofstream
如何构建 ofstream 对象的映射?
注意:在类似的问题中,有人建议使用字符串映射,但使用 ofstream 映射的原因是我不会在每次想要对每个文件进行最小更改时打开和关闭文件.
【问题讨论】:
-
无法复制流。您也许可以移动它们或使用 emplace 就地构建它们,但我自己从未尝试过。
-
那么同时处理多个流的好方法是什么?
-
我个人的感觉是,除非您正在积极地阅读或写入文件,否则最好不要让文件保持打开状态。我会读取您需要的任何数据,在内存中对其进行操作,然后一次将其全部写出。
-
@RetiredNinja 根据文件的大小,这可能不可行。
-
“那么同时处理多个流的好方法是什么?” 取决于您所说的“处理”。您要解决什么实际问题?为什么您发现同时打开多个文件很有用?您知道文件句柄通常是limited system resource,是吗?
标签: c++ dictionary file-writing