从不工作的文件中读取字符串 C++
Posted
技术标签:
【中文标题】从不工作的文件中读取字符串 C++【英文标题】:Read string from a file not working C++ 【发布时间】:2014-10-21 12:40:53 【问题描述】:我在 C++ 中有这段代码:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
string str;
ifstream file("file.txt");
file >> str;
cout << str;
return 0;
我有file.txt
与main.cpp
在同一目录中。我没有得到任何输出,我尝试指定文件的完整文件路径但仍然没有结果,并且也在几台不同的机器上尝试过。
有人知道我做错了什么吗?
【问题讨论】:
file.txt
应该在工作目录中。
您使用什么操作系统?这与您需要编写完整路径的方式有关
@MariusBancila 我试过“~/cpp/filetest/file.txt”应该没问题?如果没有,我应该把这个文件放在哪里?
@user2407413,我想,默认情况下终端工作目录是你的可执行文件所在的目录
@Ivan,不,工作目录是您在终端中更改的目录,而不是可执行文件所在的目录。如果我运行/bin/ls
,则工作目录不是/bin
【参考方案1】:
您感兴趣的是您的程序的current working directory,即如果您没有使用完整或相对路径限定文本文件应该在哪里。
您可以在运行时使用 getcwd (linux) 或 _getcwd (windows) 获取它。
编辑:我同意安迪的观点,无论如何你都应该在打开文件时检查错误。您本可以更早发现这一点(即找不到文件),例如
(前面的伪代码用于说明目的)
#include <unistd.h>
// Warning: linux-only, use #ifdefs and _getcwd for windows OS
std::string get_working_path()
char cwd[1024];
if (getcwd(cwd, sizeof(cwd)) != NULL)
return std::string(cwd);
else
return std::string("");
int main()
std::string str;
std::ifstream file("file.txt");
if (file >> str)
std::cout << str;
else
std::cout << "File not found in cwd: " << get_working_path();
// abort
// ...
【讨论】:
搭载,OP 应该检查文件是否成功打开。这会更早地暗示路径存在问题:ifstream file("file.txt"); if (file >> str) cout << str; else cout << "Bad path\n";
在 *** 上向 iostreams 提问的人从不在他们的代码中检查错误。令人沮丧。他们的老师应该被大棍子打。
这很棒。 SO上这些问题的答案很少提供代码,显示 OP当前工作目录是什么(因此,他们误解了什么)。
@JonathanWakely 我使用 file.is_open() 先检查然后对文件执行操作,但为了提问,我简化了代码。所以不用太担心,我想我的老师们应该很安全:)以上是关于从不工作的文件中读取字符串 C++的主要内容,如果未能解决你的问题,请参考以下文章