程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了从文件 C++ 中删除一行大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决从文件 C++ 中删除一行?

开发过程中遇到从文件 C++ 中删除一行的问题如何解决?下面主要结合日常开发的经验,给出你关于从文件 C++ 中删除一行的解决方法建议,希望对你解决从文件 C++ 中删除一行有所启发或帮助;

我在尝试从文本文件中“删除”一行时遇到了很大的困难,并且四处查看。我是 C++ 的初学者,所以我还不知道如何使用向量。

当我运行这个程序时,它不会向 tempfile 写入任何内容。我错过了什么吗?


    String @R_675_9421@eline,line;
    ifstream addressfile;
    addressfile.open("AddressBook.txt");
    ofstream tempfile;
    tempfile.open("temp.txt");

    int i = 1;
    while (getline(addressfile,linE)) {
        cout << (i++) << " " << line << endl;
    }

    cout << "Which line do you want to remove?" << endl;
    cin >> @R_675_9421@eline;

    // GOOD UP TO HERE

    while (getline(addressfile,linE)) {
        if (line != @R_675_9421@elinE); {
            tempfile << line << endl;
        }
    }

    tempfile.close();
    addressfile.close();

    remove ("AddressBook.txt");
    rename ("temp.txt","AddressBook.txt");
    cout << endl << endl;

更新 - 这是我拥有的当前代码,但仍未写入 tempfile

    ifstream addressfile;
    addressfile.open("AddressBook.txt");
    ofstream tempfile;
    tempfile.open("temp.txt");

    String line;
    int lineNum,i;

    i = 1;
    while (getline(addressfile,linE)) {
        cout << (i++) << " " << line << endl;
    }

    addressfile.seekg(0);

    cout << "Which line number do you want to remove?" << endl;
    cin >> lineNum;

    // GOOD UP TO HERE
    i = 1;
    
    while (getline(addressfile,linE)) {
        if (i++ != lineNum) {
            tempfile << line << endl;
        }
    }

    tempfile.close();
    addressfile.close();

    //remove ("AddressBook.txt");
    //rename ("temp.txt","AddressBook.txt");
    cout << endl << endl;

解决方法

在第一个 while 循环中,您从 addressFile 读取行,直到到达文件末尾。然后,您的第二个 while 循环试图再次从同一个文件中读取行,但没有什么可读取的了。

您需要在 addressFile 回到文件的开头,然后才能再次重新阅读这些行。在您的 2 个循环之间添加此语句:

addressFile.seekg(0);

解决这个问题后,您还有一些其他问题。

你的第二个循环中,你的 if 有一个错误的 ;,所以你实际上不会忽略任何行,你会写all tempFile 的行。

此外,您应该虑要求用户提供要忽略的行号,而不是实际的文本。并在使用前验证用户的输入。

您还应该验证文件是否已成功打开。

试试这个:

ifstream addressFile("AddressBook.txt");
if (!addressFile.is_open()) {
    cerr << "Can't open AddressBook.txt" << endl;
    return;
}

ofstream tempFile("temp.txt");
if (!tempFile.is_open()) {
    cerr << "Can't create temp.txt" << endl;
    return;
}

String line;
int lineNum,i;

i = 1;
while (getline(addressFile,linE)) {
    cout << (i++) << " " << line << endl;
}

addressFile.seekg(0);

do {
    cout << "Which line number do you want to remove?" << endl;
    if (cin >> lineNum) {
        if (lineNum > 0) break;
        cerr << "Please choose a number greater than zero" << endl;
    }
    else {
        cin.clear();
        cin.ignore(numeric_limits<streamsize>::max(),'\n');
        cerr << "Invalid number,try again" << endl;
    }
}
while (true);

i = 1;
while (getline(addressFile,linE)) {
    if (i != lineNum) {
        tempFile << line << endl;
    }
    ++i;
}

tempFile.close();
addressFile.close();

remove ("AddressBook.txt");
rename ("temp.txt","AddressBook.txt");
cout << endl << endl;

大佬总结

以上是大佬教程为你收集整理的从文件 C++ 中删除一行全部内容,希望文章能够帮你解决从文件 C++ 中删除一行所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。