Usama Iftikhar Butt Ответов: 2

Редактирование и удаление данных в файле C/C++


Черт возьми!
Я хочу редактировать и удалить данные в файле(C/C++).

Что я уже пробовал:

Я уже пробовал этот метод
 ifstream read, read1;
ofstream write, write1;

read.open("File.txt", ios::in);
write.open("Temp.txt");

int old, New, a;
cout << "Enter number you want to edit = ";
cin >> old;

cout << "Enter new number to replace ";
cin >> New;

while (!read.eof()) {
    read >> a;

    if (a == old) { write << New << endl; }
    else          { write << a << endl;   }
}

read.close();
write.close();

read1.open("Temp.txt", ios::app);
write1.open("File.txt");

while (!read1.eof()) {
    read1 >> a;
    write1 << a << endl;
}


И этот код работает хорошо.
Но проблема в том, что этот процесс идет очень медленно. Я имею в виду, что если в файле есть тысяча строк, и я хочу отредактировать или удалить только одну строку, то процесс идет очень медленно.
Поэтому мне нужен какой-то алгоритм, с помощью которого я могу редактировать или удалять только ту строку, которую хочу.
Так есть ли какой-нибудь алгоритм или функция?

Спасибо!

2 Ответов

Рейтинг:
18

Jochen Arndt

Вы можете избежать второго цикла while, который просто копирует содержимое. Вместо этого удалите File.txt а потом переименовать Temp.txt:

// Deleting the file is only necessary if the used C library 
//  implementation does not support renaming to an existing file
remove("File.txt");
rename("Temp.txt", "File.txt");
Это заставит ваше приложение работать примерно в два раза быстрее вашего кода с большими файлами.


Рейтинг:
0

KarstenK

Я бы сделал следующее:

1) прочитайте полный файл в строке
2) чем сделать строку заменить
3) и запишите файл

используйте std::string для поддержки моего плана ;-)


Usama Iftikhar Butt

не могли бы вы объяснить свою идею немного подробнее