Mam całkiem nową 64-bitową instalację Windows-7 uruchomioną w Virtual Box na MacBooku Pro. Korzystam z TextPad 5 w tym środowisku do edycji plików źródłowych, które znajdują się w folderze współdzielonym na hoście Mac. Kiedy zapisuję niektóre z tych plików źródłowych, zapisany plik kończy się z pewną ilością końca pliku powtórzoną co najmniej raz. Na przykład plik, który ma to na końcu:
...
return ttp;
};
po zapisaniu otworzyłby się za pomocą:
...
return ttp;
};
};
Jest to zdecydowanie problem z tym, jak plik jest zapisywany, a nie jak jest czytany, ponieważ widzę, że ma to znaczenie, z jakiej aplikacji korzystam do otwierania pliku (NotePad i Word w Windows 7, TextWrangler z powrotem na Macu).
Próbowałem zapisywać jako ANSI i UTF-8, z lub bez zaznaczenia opcji „Napisz Unicode i UTF-8 BOM” w preferencjach TextPad. Nie dzieje się tak ze wszystkimi plikami, chociaż nie widzę żadnego wzorca dotyczącego tego, które pliki mają lub nie mają problemu. Nie dzieje się tak w przypadku plików zapisanych na dysku Windows 7 c: \. I jak dotąd nie dzieje się tak w przypadku innych aplikacji zapisujących pliki, tylko TextPad.
Jakieś pomysły?
Moje wersje:
- Textpad 5.4.2
- Windows 7 Professional 64-bitowy, w pełni aktualny
- VirtualBox 4.0.8 r71778
- OSX 10.6.7
źródło
Odpowiedzi:
To naprawdę brzmi jak błąd w TextPadzie - nie mogę wymyślić niczego, co zrobiłby VirtualBox, który spowodowałby, że działałby w ten sposób. Sposób działania folderów współdzielonych polega zasadniczo na mapowaniu fałszywego dysku sieciowego do gościa z systemem Windows 7. Jeśli to VirtualBox wprowadza dziwne zachowanie, powinieneś zobaczyć, jak przejawia się we wszystkich innych aplikacjach.
Widziałem już wiele programów, które źle zapisywały się podczas zapisywania plików, przede wszystkim dlatego, że po prostu nadpisują zawartość istniejącego pliku bez faktycznego resetowania długości pliku lub zerowania bajtów na końcu. Oznacza to, że jeśli „skrócisz” swój plik, usuwając kilka znaków lub wierszy, uzyskasz dokładne zachowanie opisane powyżej. Z pewnością możesz wykonać kilka testów, aby naprawdę ustalić źródło problemu i użyć tego, aby zachęcić autorów do naprawienia błędów:
Jako demonstrację przy użyciu programu PowerShell - oto jak możesz replikować to samo zachowanie, które widzisz. Zacząłem od napisania akapitu A Tale of Two Cities i zapisania go jako tale.txt
Widać, że wszystkie 15 wystąpień słów „the” zostało zastąpionych pustym ciągiem, zgodnie z zamierzeniami, z niezamierzoną konsekwencją ostatnich 45 bajtów oryginalnego pliku, powtarzając w ten sposób wyrażenie „tylko w najwyższym stopniu porównania. „dwa razy na końcu pliku - podobnie do opisanej powyżej sytuacji.
Dla kompletności, prostym rozwiązaniem powyższego przykładu złego kodu jest nieużywanie metody OpenWrite i zamiast tego wywoływanie statycznej metody WriteAllText na klasie File.
źródło