Чтение строки из файла с C. Fopen с режимом w + не работает - PullRequest
0 голосов
/ 16 февраля 2020

Я создал программу C, которая читает строку из файла .txt, затем шифрует строку и, наконец, записывает строку в тот же файл.

Дело в том, что если я использую fopen("D:\\Prueba.txt","w+"), программа не работает, она печатает мусор, как это )PHI N.

Я отладил и знаю, что ошибка есть в этой строке, потому что, если я использую fopen("D:\\Prueba.txt","r+"), программа работает, и она пишет, что должна.

Но я хочу использовать w+, потому что она перезапишет то, что было в файле .txt. Почему w+ не работает?

1 Ответ

3 голосов
/ 16 февраля 2020

Если вы открываете с w+, чтобы сначала прочитать содержимое, это не сработает. С C11:

w+: усечь до нулевой длины или создать текстовый файл для обновления.

Вероятно, происходит то, что вы читаете данные из пустого файла, но не проверяете, правильно ли он работает. Это объяснило бы странный «контент», который вы видите для )PHI N.

. Одним из решений является открытие файла с помощью r, открытие другого файла с помощью w и передача содержимого с шифрованием их как часть этого процесса. Затем закройте оба, удалите оригинал и переименуйте новый в оригинальное имя. Это позволит вам обрабатывать файлы произвольного размера, поскольку вы обрабатываете их поочередно.

Если вы не хотите использовать временный файл и уверены, что можете хранить весь контент в памяти, вы можете открыть его r+, получить содержимое, открыть его в новом режиме, например:

FILE *readFh = fopen( "myfile.txt", "r+");
// Read in content, massage as needed.

FILE *writeFh = frepoen( NULL, "w+", readFh);
// Provided that worked, you should now have an empty file to write to.
// Write back your massaged data.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...