读取和写入文件在C ++中不起作用

时间:2013-07-28 14:19:11

标签: c++ file fstream

我基本上试图反转文本文件的内容。当我运行此代码时,没有任何反应。代码:

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写入文件但是如何删除所有文件内容?

2 个答案:

答案 0 :(得分:1)

当你需要调试这样的东西时 - 说“正在运行所有的函数并且正在创建所有变量,并且它没有任何警告地编译”并不是真的在调试。

调试 - 这不起作用。删除位,直到找到不起作用的位。就像你说的 - 所有变量都是你所期望的。所以...尝试看看,例如,你从文件读取和写入的方式是否有效。只需编写一个小程序,打开一个文件就像打开它一样,从中读取就像你一样,然后以相同的方式写回来......看看是否有效。

换句话说,尝试找到能够再现所见内容的最小程序。

答案 1 :(得分:1)

在这种特殊情况下,当您读取了所有输入内容时,您的文件处于“错误状态”(状态中设置了eoffail位)。

您需要使用fileToReverse.clear();清除它。您的文件位置也将位于文件末尾,因此您需要使用fileToReverse.seekp(0, ios_base::beg)将位置设置为开头。

但是,就像g-makulik一样,我更喜欢有两个文件,一个用于输入,一个用于输出。节省了大量的麻烦。