1

Я только что закончил писать большой код на c, но когда я сохраняю и открываю снова, файл содержит странные символы: "@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@0000664^@0001750^@0001750^@0000000031"

Как я могу восстановить файл?

Я пишу эту программу весь день. :((

5 ответов5

8

Это может быть длинный выстрел, но это выглядит подозрительно как часть заголовка файла TAR. Возможно, вы когда-то пытались сделать резервную копию с помощью tar и использовали то же имя файла, что и выходной файл? Я подозреваю, что причина в том, что заголовок файла TAR начинается с:

 char filename[100];  // null padded
 char mode[8]; // octal
 char nuid[8]; // octal
 char ngud[8];
 char size[12];
 ...

Итак, глядя на этот фрагмент, он соответствует шаблону - файл был rw-rw-r, с ID владельца / группы 1000 и размером от 200 до 207 байт (похоже, что это поле вырезано в вашем cut-n- вставить). Выдача - если файл имеет "ustar", начинающийся с символа 257. В этом случае просто используйте команду tar, чтобы попытаться извлечь из нее (на всякий случай во временную директорию), надеюсь, вы что-то из нее получите.

2

Перед выходом из Vim введите

:e! your_file_path

попытаться загрузить файл. Это на тот случай, если вы просто попытались отредактировать неправильный файл.

В другой оболочке найдите файл your_filename.recover или file_name.swp. Если найден, то начинается

vim -r file_name

должен вернуть ваш файл.

1

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

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

Мне действительно очень жаль вас, потому что я знаю, как больно потерять что-то, на что вы потратили целый день (наряду с вашими любимыми усилиями, вашей страстью и энергией), но очень маловероятно, что вы сможете их восстановить .:(

0

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

0

^ @ - это двоичный ноль, низкие значения, '\0', 0x00. Лучше всего предположить, что у вас есть строка с нулевым разделителем, и вы записываете длину массива char вместо использования strlen .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .