Страница 3 из 3
Re: APPCRASH как искать или как исправить?
Добавлено: 20.06.2016 05:57:32
yus
А если снять дамп в момент падения и поглядеть чего в нем?
Я вот только не знаю можно ли в лазарус работать с дампами, не приходилось.
Re: APPCRASH как искать или как исправить?
Добавлено: 20.06.2016 16:37:28
azsx
зафиксировал такие же зависания. Теперь совершенно ясно, что хотя я был абсолютно убежден, что файл будет всегда - оказывается не факт. Сменил код на такой:
Код: Выделить всё
function TextFileToString(const FName: TFileName): string;
var
St: TStringList;
begin
Result := '';
try
St:= TStringList.Create;
try
St.LoadFromFile(FName);
Result:= St.Text
except
showmessage ('исключение');
Result:= ''; // **************** добавил
end;
finally
St.Free
end;
end;
пока
чисто гадаю, что результ из библиотеки LAZUTF8 при чтении несуществующего файла передает чо то не то в insert и update в бд postgresql после чего идет вылет. Но как бы проверяю пока.
Re: APPCRASH как искать или как исправить?
Добавлено: 20.06.2016 17:12:15
Лекс Айрин
azsx, так проверяйте перед чтением файл на существование. FileExist/FileExistUTF8 в этом помогут.
Re: APPCRASH как искать или как исправить?
Добавлено: 20.06.2016 19:57:56
pupsik
azsx TStringList резвится?

Кстати... Пересмотрите более внимательно весь ваш код.
Просто из того что вы выложили "напрашиваются" нюансы.
Ваш код:
Код: Выделить всё
function GetFileSize(FileName: String): Int64;
var
FS: TFileStream;
begin
try
FS := TFileStream.Create(Filename, fmOpenRead);
except
Result := -1;
end;
if Result <> -1 then Result := FS.Size;
FS.Free;
end;
Надо бы сделать так:
Код: Выделить всё
function GetFileSize(FileName: String): Int64;
var
FS: TFileStream;
begin
Result := -1;
try
try
FS := TFileStream.Create(Filename, fmOpenRead);
Result := FS.Size;
except
///обработка ошибки
finally
FS.Free;
end;
end;
Добавлено спустя 18 минут 20 секунд: при чтении несуществующего файла передает
и каким образом вы тащите несуществующий файл? Т.е. у вас нет проверки перед вышеизложенными функциями?
Добавлено спустя 43 минуты 56 секунд:Хотя: чем вас не устраивает функция FileSizeUtf8() из LazFileUtils?
Тогда будет проще:
Код: Выделить всё
function TextFileToString(const FName: TFileName): string;
var
St: TStringList;
begin
Result := '';
if (FileSizeUtf8(FName) < {ваш размер}) and (FileExistsUTF8(FName)) then
begin
try
St:= TStringList.Create;
try
St.LoadFromFile(FName);
Result:= St.Text
except
showmessage ('исключение');
Result:= ''; // **************** добавил
end;
finally
St.Free
end;
end;
end;
Re: APPCRASH как искать или как исправить?
Добавлено: 20.06.2016 21:06:06
resident
azsx писал(а):пока чисто гадаю
Я тему не читал, но может превышаете максимальное количество строк TStringList?
Re: APPCRASH как искать или как исправить?
Добавлено: 20.06.2016 23:11:55
pupsik
максимальное количество строк TStringList
вроде маленькие файлы. В принципе TStringList "тянет" пока память не оф, а потом... даун

Вполне возможно кириллица в путях, или имени. Вот и не грузит. Не знаю как сейчас в винде. Ранее TStringList "пугался" кириллицу. приходилось "напутствовать" на путь истинный
