我基本上试图反转文本文件的内容。当我运行此代码时,没有任何反应。代码:
getArguments();
stringstream ss;
ss << argument;
string fileName;
ss >> fileName;
fstream fileToReverse(fileName);
if (fileToReverse.is_open()) {
send(sock, "[*] Contents is being written to string ... ", strlen("\n[*] Contents is being written to string ... "), 0);
string line;
string contentsOfFile;
while (getline(fileToReverse, line)) {
contentsOfFile.append(line);
line = "\0";
}
send(sock, "done\n[*] File is being reversed ... ", strlen("done\n[*] File is being reversed ... "), 0);
string reversedText(contentsOfFile.length(), ' ');
int i;
int j;
for(i=0,j=contentsOfFile.length()-1;i<contentsOfFile.length();i++,j--) {
reversedText[i] = contentsOfFile[j];
}
contentsOfFile = "\0";
fileToReverse << reversedText;
fileToReverse.close();
send(sock, "done\n", strlen("done\n"), 0);
}
fileName是从用户输入创建的,我知道该文件存在。它只对文件没有任何作用。如果有人有任何想要分享的想法,那就太好了。
更新:
我现在可以将reverseText写入文件但是如何删除所有文件内容?
答案 0 :(得分:1)
当你需要调试这样的东西时 - 说“正在运行所有的函数并且正在创建所有变量,并且它没有任何警告地编译”并不是真的在调试。
调试 - 这不起作用。删除位,直到找到不起作用的位。就像你说的 - 所有变量都是你所期望的。所以...尝试看看,例如,你从文件读取和写入的方式是否有效。只需编写一个小程序,打开一个文件就像打开它一样,从中读取就像你一样,然后以相同的方式写回来......看看是否有效。
换句话说,尝试找到能够再现所见内容的最小程序。
答案 1 :(得分:1)
在这种特殊情况下,当您读取了所有输入内容时,您的文件处于“错误状态”(状态中设置了eof
和fail
位)。
您需要使用fileToReverse.clear();
清除它。您的文件位置也将位于文件末尾,因此您需要使用fileToReverse.seekp(0, ios_base::beg)
将位置设置为开头。
但是,就像g-makulik一样,我更喜欢有两个文件,一个用于输入,一个用于输出。节省了大量的麻烦。