Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.07.2010, 02:22   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию Исправить Acces Violation при загрузке файла

Привет всем!

Суть проблемы:
Написал функцию для "разбора файла по составным" =)

функция сравнивает данные из файла с файлами рядом с программой.

выскакивает Acces Violation немогу найти уже раз 200 просмотрел код..
Может чужими глазами найдётся ошибка...

Код:
function CheckFilesList:Boolean;
var
  i:Integer;
  ListName,FilesURL,myDir:string;
  sFileName,sFileMD5,SFileCRC: array of string;
  FilesList:TStringList;
  FilesToGet:TStringList;
begin
  Result:=False;
  myDir:=IncludeTrailingBackslash(ExtractFilePath(ParamStr(0)));
  ListName:=AdminForm.FilesListNameEdit.Text;
  FilesURL:=AdminForm.HTTPFilesEdit.Text;
  FilesList:=TStringList.Create;
  if FilesListLoaded then
  begin
  SendMessage(MainForm.Handle,STATUS_PROGRESS,0,DWORD(PChar(Translator('Проверка файлов','Checking Files'))));
  SendMessage(MainForm.Handle,PROGRESS_MAX,3,FilesList.Count-1);
  SendMessage(MainForm.Handle,CHECK_FULL_COUNT,0,FilesList.Count-1);
  Translator_MessageToLog('Файл-лист загружен, начинаю проверку файлов....','Files-list downloaded! Checking files...',MainForm.log);
  FilesList.LoadFromFile(myDir+ListName);
  SetLength(sFileName,FilesList.Count);
  SetLength(sFileMD5,FilesList.Count);
  SetLength(SFileCRC,FilesList.Count);

  for i:=0 to FilesList.Count -1 do
  begin
  SendMessage(MainForm.Handle,PROGRESS,3,i);
  sFileName[i] := Copy(FilesList.Strings[i], 1, Pos(':', FilesList.Strings[i]) - 1);
     case AdminForm.FilesHashGr.ItemIndex of
     0: sFileMD5[i] := Copy(FilesList.Strings[i], Pos(':', FilesList.Strings[i]) + 1, Length(FilesList.Strings[i]));
     1: sFileCRC[i] := Copy(FilesList.Strings[i], Pos(':', FilesList.Strings[i]) + 1, Length(FilesList.Strings[i]));
     end;
  end;
  SendMessage(MainForm.Handle,CHECK_CURRENT_FILE,0,DWORD(PChar(Translator('Текущий Файл: '+sFileName[i],'Current file: '+sFileName[i]))));

  for i:=0 to Length(sFileName)-1 do
  begin
    if (not FileExists(myDir+sFileName[i])) then
    begin
    FilesToGet.Create;
       case AdminForm.FilesHashGr.ItemIndex of
        0:
        begin
        FilesToGet.Add(FilesList[i]);
        end;

        1:
        begin
        FilesToGet.Add(FilesList[i]);
        end;
       end;
     end else
     begin
        case AdminForm.FilesHashGr.ItemIndex of
        0:
        begin
           if (MD5DigestToStr(MD5File(myDir+sFileName[i]))<>sFileMD5[i]) then
           begin
           FilesToGet.Add(FilesList[i]);
           end;
        end;

        1:
        begin
            if (FileCRC(myDir+sFileName[i])<>sFileCRC[i]) then
            begin
             FilesToGet.Add(FilesList[i]);
             end;
        end;
        end;
     end;
  end;
  SendMessage(MainForm.handle,PROGRESS,3,0);
  SendMessage(MainForm.handle,CHECK_CURRENT_FILE,3,DWORD(PChar('')));
  Translator_MessageToLog('Проверка файлов завершена! ','Checking files complited!',MainForm.log);
  SendMessage(MainForm.Handle,CHECK_NEW_SIZE,0,FilesToGet.Count);
  FilesList.Free;
  FilesToGet.SaveToFile(myDir+'FUnF');
  FilesToGet.Free;
  end else
  begin
  Translator_MessageToLog('[Фатальная Ошибка] Файл-лист не найден! Проверка прервана! Загрузка обновлений прервана!','[Fatal Error] Files-list not found! Checking Failed! Dowloading updates failed!',MainForm.log);
  Result:=False;
  end;
end;
Человек_Борща вне форума Ответить с цитированием
Старый 31.07.2010, 20:49   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

трассировка что показала?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 01.08.2010, 14:50   #3
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Как найти причину Access Violation - учитесь пользоваться отладчиком.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подмена exel файла при загрузке со страницы Алексей131 JavaScript, Ajax 3 27.06.2010 14:20
Проблема при загрузке файла XML в TreeView artemavd Общие вопросы Delphi 1 20.06.2010 15:39
Ругается(Acces Violation) при чтении DAT-файла Человек_Борща Общие вопросы Delphi 5 25.05.2010 19:42
ПРограмма подвисате при загрузке большого файла.. cowboy Общие вопросы .NET 15 05.10.2009 13:28
Ошибка при загрузке файла html Ign Microsoft Office Excel 1 11.11.2007 13:55