1

这是我在实现方法之前用来测试方法的主文件。我正在尝试获取目录中所有文件的列表,将它们写入 txt 文件(直到这里都可以正常工作),然后从该文本文件中读取文件名。

using namespace std;

string sysCall = "", location = "~/Documents/filenames.txt";
string temp = "";
sysCall = "ls / > "+location;
system(sysCall.c_str());

ifstream allfiles(location.c_str());
allfiles.good();
getline(allfiles, temp);
cout<<temp<<endl;  //At this point, the value of temp is equal to ""

return -1;

程序运行后,没有任何文字输出。从我在其他人的问题中读到的内容来看,这应该有效(但显然无效)。我在这里做错了什么?

编辑: allfiles.good() 返回false,但我不明白为什么它会返回...

4

3 回答 3

7

ifstream allfiles("~/Documents/filenames.txt");不做你认为它做的事。波浪号~字符不是文件名的一部分——它是一些 shell 解释的特殊字符。您需要整个路径,其中没有~$字符。

尝试设置location"/tmp/filenames.txt",或只是"filenames.txt"

此外,如果您可以使用Boost.Filesystem,您可以使用 adirectory_iterator而不是调用/bin/ls.

于 2011-06-10T19:20:40.130 回答
4

我敢打赌,该system()调用会将~文件名中的 扩展至您的主目录(例如/home/mrswmmr),但ifstream不会。~用你的主目录的完整路径替换它,它应该可以工作。

于 2011-06-10T19:22:10.263 回答
0

它不能保证工作,因为system不能保证。

于 2011-06-10T19:18:54.703 回答