А если снять дамп в момент падения и поглядеть чего в нем?
Я вот только не знаю можно ли в лазарус работать с дампами, не приходилось.
Решено: APPCRASH как искать или как исправить?
Модератор: Модераторы
зафиксировал такие же зависания. Теперь совершенно ясно, что хотя я был абсолютно убежден, что файл будет всегда - оказывается не факт. Сменил код на такой:
пока чисто гадаю, что результ из библиотеки LAZUTF8 при чтении несуществующего файла передает чо то не то в insert и update в бд postgresql после чего идет вылет. Но как бы проверяю пока.
Код: Выделить всё
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 после чего идет вылет. Но как бы проверяю пока.
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
azsx, так проверяйте перед чтением файл на существование. FileExist/FileExistUTF8 в этом помогут.
azsx TStringList резвится? 
Кстати... Пересмотрите более внимательно весь ваш код.
Просто из того что вы выложили "напрашиваются" нюансы.
Ваш код:
Надо бы сделать так:
Добавлено спустя 18 минут 20 секунд:
Добавлено спустя 43 минуты 56 секунд:
Хотя: чем вас не устраивает функция FileSizeUtf8() из LazFileUtils?
Тогда будет проще:
Кстати... Пересмотрите более внимательно весь ваш код.
Просто из того что вы выложили "напрашиваются" нюансы.
Ваш код:
Код: Выделить всё
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;
azsx писал(а):пока чисто гадаю
Я тему не читал, но может превышаете максимальное количество строк TStringList?
вроде маленькие файлы. В принципе TStringList "тянет" пока память не оф, а потом... даунмаксимальное количество строк TStringList
Вполне возможно кириллица в путях, или имени. Вот и не грузит. Не знаю как сейчас в винде. Ранее TStringList "пугался" кириллицу. приходилось "напутствовать" на путь истинный
