Kurcze, mam w którymś programiku procedurę zapisu pliku. Niby taka jak wszystkie inne, a jednak jest problem ;P. Otóż na niektórych komputerach (czytaj: na jednych wcale, na innych czasami, na jeszcze innych zazwyczaj, a na nielicznych zawsze) program się wywala w momencie wykonywania instrukcji AssignFile. Sprawdzałem w Helpie - nie podali żadnych możliwości wystąpienia błędu (no oprócz jednego przeciwwskazania - nie otwierać już otwartego pliku, dlatego upewniłem się, że mój program tego nie robi), więc nie mam zielonego pojęcia co jest grane -_-'.
Daj najpierw RewriteFile(TexFile);
Daj najpierw RewriteFile(TexFile);
Moje Delphi nawet o czymś takim nie słyszało ;p
Nie wiem, czy to pomoze, ale Delphi ma przykry zwyczaj niezauwazania bledow i/o przy pewnych instrukcjach. Blad ujawnia sie pozniej. Np. proba utworzenia juz istniejacego katalogu powoduje niejawny blad, ktory wyskakuje np przy Reset(F) duzo dalej w kodzie. Pamietaj tez, ze Reset na pliku readonly wymaga odpowiedniego ustawienia zmiennej FileMode PRZED otwarciem pliku. Wprawdzie twierdzisz, ze u Ciebie blad (BTW - jaki) jest przy AssignFile, ale sprawdz tez te rzeczy.
Ano sprawdzałem dokładnie. Dałem se pare wyznaczników, czy sie krzaczy na AssignFile, czy na Reset i z całą pewnością stwierdzam, że właśnie na Assign i tego nie rozumiem :(. Za to potem błędy są naturalnie przy kazdej operacji na tym pliku, bo nie jest on otwarty.
Ale jak sie krzaczy? Jaki jest blad?
Było ostantio wyłapywane przez try..except, przypuszczam że jakiś AccessViolation, ale pewności jeszcze nie mam. Jak (jeśli) mi wyskoczy to powiem ;)
PS. Niewiarygodne rzeczy się tu dzieją. <font color="black">Under investigation...</span>
Pochwalony! Popróbuj na różnych plikach, tzn utwórz sobie jakieś pliki i na nich także próbuj. Jeżeli tylko przy jakimś występuje błąd, to znaczy, że coś z tego (najprawdopodobniej) korzysta.
malo prawdopodobne - on zaklada nowy plik :)
No to chyba musi działać. Sprawdź dokładnie
var
t: textfile;
begin
AssignFile(t, 'c:/plik.txt');
Rewrite(t);
...
CloseFile(t);
end;
moze sprawdzic czy istnieje i robic w zaleznosci reset lub rewrite...
a w ostatecznosci operuj na dynamicznym tstringlist i go zapisuj :]