获取线未将所有字符保存到字符串

getline not saving all characters to string

本文关键字:字符 保存 字符串 获取      更新时间:2023-10-16

以下程序将目录列表保存到文件中。然后读取文件,并询问用户文件夹名称是否为收藏夹。我的问题是,getline 函数不会将输入文件中的所有字符都保存到字符串中。 这是代码:

int main()
{
fstream list;
fstream favorites;
string command1;
string command2;
string file;
string file2;
string line;
// Cycle through the directories outputing the list of directories to a file
for (int i = 0; i < 27; i++)
{
system("Y:");
command2 = "dir Y:\Blu-Rays\";
command2 += letters[i];
command2 += "\";
command2 += " /b > Y:\Blu-Rays\";
command2 += letters[i];
command2 += "\files.txt";
cout << command2 << endl;
system(command2.c_str());
file = "Y:\Blu-Rays\";
file += letters[i];
file += "\files.txt";
list.open(file);
file2 = "Y:\Blu-Rays\";
file2 += "favorites.txt";
favorites.open(file2);
// The dir command also lists the file.txt in the file, open the file and erase the line
while (getline(list, line))
{
// If the line file.txt is recognized, do not append the line to the file
if (line != "file.txt")
{
list << line << endl;
save(line);
line = "";
}
}
}
list.close();
favorites.close();
return 0;
}

以下是代码的输出:

dir Y:Blu-Rays# /b > Y:Blu-Rays#files.txt
Current title: 2012
Do you want to save the title as a favorite? [y/n]: y
Current title: s to Kill
Do you want to save the title as a favorite? [y/n]: n
Current title: Rise of an Empire
Do you want to save the title as a favorite? [y/n]: n

输出的第 4 行应该是 3 天杀戮,它读作 s 杀戮。接下来,第五行应该是:300:帝国的崛起,当它读到帝国的崛起时

同时从同一std::fstream读取和写入可能不会达到您的预期。

更简单的解决方案是使用boost::filesystemstd::filesystem遍历文件:http://en.cppreference.com/w/cpp/experimental/fs

for(auto& path: fs::directory_iterator("y:\blurays\"))
std::cout << path << 'n';