Вопрос

Я открываю файл и получаю его QtextStream. Затем я читаю линию потока по линии с помощью readline (). Когда линия соответствует определенной строке, мне нужно заменить ее другой строкой. Мне нужно, чтобы поведение было так, что линия полностью заменена (т.е., если строка была «длинным словом», и я заменяю ее «словом», строка должна содержать «слово» и «слово» только).

На данный момент я использую SEECT (), а затем оператор <<, чтобы поместить мою строку в данном месте, но остатки последней строки остаются, поэтому у меня осталось что -то вроде «WordWord». Как я могу предотвратить это и убедиться, что вся предыдущая строка полностью заменена моей новой?

Это было полезно?

Решение

Насколько мне известно, вы не можете просто удалить кусок текстового файла на месте. Если заменяющая строка была идентична по размеру, вы могли бы заменить эти точные байты, и если она была короче, вы могли бы взломать проблему, заполняя пустое пространство ноль.

Если вы не хотите этого делать, вам придется создать новый файл, прочитать каждую строку из старого файла, внести какие -либо необходимые изменения в эту строку в памяти, а затем записать эту строку в новый файл. Как только это будет завершено, вы можете заменить исходный файл новым файлом.

Если бы можно было добавить/удалить кусочки в/из файла, вы, скорее всего, останетесь с значительно фрагментированным файлом на жестком диске. Если вам нужно было вставить больше символов, необходимо было бы создать дополнительные фрагменты, так как новые данные просто не могли бы соответствовать количеству пространства, занятого старыми данными, а удаление данных оставило бы отверстия в файле.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top