C++ 读取和写入文件不是';t在C+中工作+;

C++ 读取和写入文件不是';t在C+中工作+;,c++,file,fstream,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 stri

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

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);
}
getArguments();
细流ss;
ss>文件名;
fstream fileToReverse(文件名);
if(fileToReverse.is_open()){
发送(sock,“[*]内容正在写入字符串…”,strlen(“\n[*]内容正在写入字符串…”),0);
弦线;
字符串内容文件;
while(getline(fileToReverse,line)){
contentsOfFile.append(第行);
行=“\0”;
}
发送(sock,“已完成\n[*]文件正在反转…”,strlen(“已完成\n[*]文件正在反转…”),0);
字符串反转文本(contentsOfFile.length(),“”);
int i;
int j;

对于(i=0,j=contentsOfFile.length()-1;i来说,当您需要调试类似的东西时,说“所有函数都在运行,所有变量都在创建,编译时没有任何警告”并不是真正的调试

调试-这不起作用。删除位,直到找到不起作用的部分。正如你所说的-所有变量都是你所期望的。因此…试试看,例如,你从文件读写的方式是否有效。只需编写一个小程序,像打开文件一样打开文件,像打开文件一样读取,然后将任何内容写回文件中和你一样,看看能不能用


换言之,请尝试找到能够再现您所看到内容的最小程序。

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

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


但是我,就像g-makulik一样,更喜欢有两个文件,一个用于输入,一个用于输出。这样可以避免大量的混乱。

您是否尝试调试它?是的。看起来所有的函数都在运行,所有的变量都在创建,并且编译时没有任何警告。当您调试时,您在文件末尾处于错误状态正在尝试写入。我怀疑您需要
fileToReverse.clear()
在您可以写入之前。您可能还希望找到文件的开头…谢谢您的帮助,但文件中仍然包含所有以前的内容以及反向内容。有没有办法清除整个文件?通常,我更喜欢将输入和输出分开
std::istream
std::ostream
实例。请看@MatstPeterson的评论。