【发布时间】:2017-08-18 15:57:36
【问题描述】:
WRT 下面的代码,它编译得很好,也可以毫无例外地执行。但是没有内容被写入 javascript 文件。它是 0 字节。
std::map<std::string, std::shared_ptr<std::ofstream>> m_jsTabFilesMap;
m_jsTabFilesMap.insert({ fileKey, std::make_shared<std::ofstream>(jsFilename) });
auto jsFile = m_jsTabFilesMap[tabName];
(*jsFile).open(tabName + ".js");
*jsFile << contentofJSFile; // write to JS file
不知道我错过了什么,如何让它写入文件。
[问题更新] 使用普通指针方法也会导致相同的结果。
std::map<std::string,std::ofstream*> m_jsTabFilesMap;
m_jsTabFilesMap.insert({ filekey, new std::ofstream(jsFilename)});
还尝试删除显式 Open() 调用,结果相同,没有任何内容写入文件。
【问题讨论】:
-
tabName的类型是什么?使用串联时可能很重要。 -
要像这样调试代码,首先要简化。创建一个指向
std::ofstream的共享指针并弄清楚如何写入它。然后将其放入您的地图中,看看它是否仍然有效。几乎任何人都可以用这么少的 sn-p 代码告诉你。无法独立重现您的结果。 -
打开文件时返回值是多少?我建议使用文件名创建一个字符串变量,然后传递给
open()。这允许您在使用调试器时查看实际的文件名。 -
std::make_shared<std::ofstream>(jsFilename)看起来您在此处打开了文件,或尝试打开。你试图在这里再次打开它(*jsFile).open(tabName + ".js");。如果第一次打开成功,则以流处于失败状态结束。 -
@codeLover 你不能复制它但你可以得到一个参考像
auto& jsFile = m_jsTabFilesMap[tabName];
标签: c++ c++11 stl std ofstream