Это действительно звучит как ошибка в 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.