0

我基本上是在尝试反转文本文件的内容。当我运行这段代码时,什么也没有发生。代码:

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 是根据用户输入创建的,我知道该文件存在。它只是对文件没有任何作用。如果有人有任何他们想分享的想法,那就太好了。

更新:

我现在可以将 reversedText 写入文件,但如何删除所有文件内容?

4

2 回答 2

1

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

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

换句话说,试着找到最小的程序来重现你所看到的。

于 2013-07-28T14:35:39.820 回答
1

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

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

但我和 g-makulik 一样,更喜欢有两个文件,一个用于输入,一个用于输出。节省了大量的乱七八糟的东西。

于 2013-07-28T14:56:22.500 回答