【发布时间】:2011-11-19 04:50:32
【问题描述】:
我正在尝试在 C++ 中打开一个文件,但这似乎给我带来了一些麻烦,这里是目前处理打开文件的代码:
void CreateHistogram(string str_file, vector<HistogramWord> &result) {
string line;
long location;
HistogramWord newWord;
const char * filename = str_file.c_str();
//ifstream myfile (str_file.c_str());
ifstream myfile (filename);
//myfile.open(filename);
if (myfile.is_open()) {
while (myfile.good()) {
getline(myfile, line);
line = clarifyWord(line);
好的,只是为了解释一下,HistogramWord 是一个在标题中定义的结构,从我在在线文档中阅读的内容来看,文件名必须是 const char * 类型,所以这就是我所拥有的完毕。将str_file 转换为const char *。
现在,我尝试了一些不同的方法,这就是为什么有些代码被注释掉了。当它到达if (myfile.is_open()) 行时,它总是评估为假。有人知道为什么吗?
谢谢, 布兰登
【问题讨论】:
-
是的,它确实存在并且与主函数在同一目录中,所以我应该可以将其称为“test.txt”,对吗?
-
我也刚刚尝试了
myfile.open(filename);未注释但它仍然不想工作:/ -
请打印文件名并将其复制到您的地址栏或资源管理器或您正在使用的任何工具,并验证文件是否存在。
-
就在阅读您的评论 FailedDev 之前,我发现一个网站解释了如果您不输入完整的文件路径,它将与实际位于 TEMP 文件夹中的目标文件位于同一目录中在 Windows 上。它没有进入 if 语句,所以文件是打开的。然而,不工作的行是
while (myfile.good()) {,它没有进入那个循环。如果没有这个while循环,还有其他方法可以读取文件的内容吗?这似乎不是很充分的证据。 -
@Brandon - 无论如何,只需执行
while (std::getline(...)),它会返回一个istream which is overloaded,因此您可以这样使用它。 (顺便说一句:我假设你的意思是万无一失?)
标签: c++ file-io text-files