У меня довольно новая 64-битная установка Window-7, запущенная в Virtual Box на MacBook Pro. Я использую TextPad 5 в этой среде для редактирования исходных файлов, которые находятся в общей папке на Mac-хосте. Когда я сохраняю некоторые из этих исходных файлов, сохраненный файл заканчивается тем, что некоторое количество конца файла повторяется один или несколько раз. Например, файл, который имеет это в конце:

    ...
    return ttp;
    };

после сохранения откроется:

   ...
   return ttp;
   };

};

Это определенно проблема с тем, как файл записывается, а не с тем, как он читается, потому что теперь я могу видеть, каким приложением я открываю файл (NotePad & Word в Windows 7, TextWrangler в Mac).

Я пытался сохранить как ANSI и UTF-8, так и с или без 'Write Unicode и UTF-8 BOM', отмеченных в настройках TextPad. Это происходит не со всеми файлами, хотя я не вижу шаблонов, в которых есть или нет проблемы с файлами. Это не происходит с файлами, записанными на диск Windows 7 c:\. И до сих пор это не происходит из других приложений, сохраняющих файлы, только TextPad.

Есть идеи?

Мои версии:

  • Textpad 5.4.2
  • 64-разрядная версия Windows 7 Professional, полностью обновленная
  • VirtualBox 4.0.8 r71778
  • OSX 10.6.7

1 ответ1

0

Это действительно звучит как ошибка в TextPad - я не могу думать ни о чем, что VirtualBox мог бы сделать так, что бы он так себя вел. Принцип работы общих папок заключается в том, что он в основном сопоставляет фальшивый сетевой диск с гостем Windows 7. Если это был VirtualBox, представляющий странное поведение, вы должны увидеть его во всех других приложениях.

Я видел, как многие программы плохо себя вели при сохранении файлов, прежде всего в том, что они просто перезаписывают содержимое существующего файла, не сбрасывая длину файла или обнуляя байты в конце. Это означает, что если вы "укоротите" свой файл, удалив несколько символов или строк, вы получите точное поведение, описанное выше. Конечно, вы могли бы выполнить несколько тестов, чтобы действительно определить источник проблемы, и использовать его, чтобы авторы исправили ошибки:

  • Можете ли вы повторить поведение, используя "Сохранить как" вместо "Сохранить"?
  • Можете ли вы повторить поведение, сделав файл короче? больше?
  • Можете ли вы повторить поведение на других сетевых дисках? или только функции общих папок?
  • Могут ли какие-либо другие "фильтры" влиять на операцию сохранения, например, антивирус, шаги после сборки, контроль исходного кода и т.д.

В качестве демонстрации, используя PowerShell - вот как вы можете повторить то же поведение, которое вы видите. Я начал с того, что взял первый абзац « Повести о двух городах» и сохранил его как tale.txt.

$text = gc tale.txt
$fs = [System.IO.File]::OpenWrite("tale.txt")
$sw = New-Object System.IO.StreamWriter($fs)
$sw.Write($text.Replace("the",""))
$sw.Dispose()

Вы можете видеть, что все 15 экземпляров слов "the" были заменены пустой строкой, как и предполагалось, с непреднамеренным последствием оставшихся 45 последних байтов исходного файла, что повторяет фразу «только в превосходной степени сравнения». "дважды в конце файла - похоже на ситуацию, которую вы описали выше.

Для полноты простое решение приведенного выше примера плохого кода состоит в том, чтобы не использовать метод OpenWrite, а вместо этого вызвать статический метод WriteAllText для класса File.

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