Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

FTP

10K
24 апреля 2008 года
In0stRAnez
66 / / 16.02.2008
Неделю назад всё прекрасно работало (клиент подключался к серверу без ошибок)

но недавно открыл сорс ничего не изменив компельнул и бац какаето ошибка (Failed: Range chek error.), но это ещё не всё, я подумал что раньше чтото менял и сохранил, удалил этот исход и вытащил тот же самый только чистый исход сервера и клиента из архива, он должен работать на 100%
но ошибка повторяется.... я уже даже фаервол выключил... незнаю что и делать!

в чём может быть проблема? Помогите плиз.
6
24 апреля 2008 года
George
4.1K / / 05.01.2007
Я с такой жестью не сталкивался, но твоём месте попробывал бы {$R-}
6
24 апреля 2008 года
George
4.1K / / 05.01.2007
B вообще код давай, где ошибка то выскакивает.
10K
24 апреля 2008 года
In0stRAnez
66 / / 16.02.2008
ошибок в серве нету, вот ошибка в клиенте, выкидывает ту ошибку и стрелку с сине выделенным текстом ставит на строку, я даже дельфу переустановил...

вот короче

Код:
implementation

{$R *.dfm}

var
 AverageSpeed: Double=0;

procedure TMainForm.ChageDir(DirName: string);
var
 LS: TStringList;
begin
 LS:=TStringList.Create;
 try
  IdFTP1.ChangeDir(DirName);
  IdFTP1.TransferType:=ftASCII;
  CurrentDirEdit.Text:=IdFTP1.RetrieveCurrentDir;
 [COLOR="YellowGreen"]-->[/COLOR] [COLOR="Blue"]DirectoryListBox.Items.Clear;[/COLOR]
  IdFTP1.List(LS);
  DirectoryListBox.Items.Assign(LS);
  if DirectoryListBox.Items.Count>0
  then
   if AnsiPos('total', DirectoryListBox.Items[0])>0
   then DirectoryListBox.Items.Delete(0);
 finally
  LS.Free;
 end;
end;


как я заметил конетктит он норм, но начинает тупить на процедуре ChageDir - тут по идее должно в клиент загружать все папки и файлы, чтобы их видно было...
6
24 апреля 2008 года
George
4.1K / / 05.01.2007
Видимо у тебя индекс массива находится вне границ - ERangeError.
Попробуй либо {$R-}, либо просто отлови эту ошибку в процедуре. Может поможет.
10K
24 апреля 2008 года
In0stRAnez
66 / / 16.02.2008
Блин, хорошо пригляделся к серваку там тоже ошибка летит причём тоже такая же!!!!!!!!

происходит при коннекте клиента к серверу
Код:
function FormatUnixDirEntry(F : TSearchRec) : String;
var
    Attr             : String;
    Ext              : String;
    Day, Month, Year : Integer;
    Hour, Min        : Integer;
    SizeStr          : String;
    TimeStr          : String;
const
    StrMonth : array [1..12] of String =
        ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
begin
{$IFNDEF VER80}{$WARNINGS OFF}{$ENDIF}
    if ((F.Attr and faVolumeID) <> 0) {or
       ((F.Attr and faHidden)   <> 0)} then begin
        { Ignore hidden files and volume ID entries }
        Result := '';
        Exit;
    end;

    Attr := '-rw-rw-rw-';
    if (F.Attr and faDirectory) <> 0 then
        Attr[1] := 'd';

    if (F.Attr and faReadOnly) <> 0 then begin
        Attr[3] := '-';
        Attr[6] := '-';
        Attr[9] := '-';
    end;
{$IFNDEF VER80}{$WARNINGS ON}{$ENDIF}

    Ext := UpperCase(ExtractFileExt(F.Name));
    if (Ext = '.EXE') or (Ext = '.COM') or (Ext = '.BAT') then begin
        Attr[4]  := 'x';
        Attr[7]  := 'x';
        Attr[10] := 'x';
    end;

    Day   := (HIWORD(F.Time) and $1F);
    Month := ((HIWORD(F.Time) shr 5) and $0F);
    Year  := ((HIWORD(F.Time) shr 9) and $3F) + 1980;
{   Sec   := ((F.Time and $1F) shl 1); }
    Min   := ((F.Time shr 5) and $3F);
    Hour  := ((F.Time shr 11) and $1F);

{$IFDEF STREAM64} { Defined in Delphi 6 and up }
    if F.FindData.nFileSizeHigh = 0 then
        SizeStr := IntToStr(F.FindData.nFileSizeLow)
    else
        SizeStr := IntToStr(F.FindData.nFileSizeLow +
                           (Int64(F.FindData.nFileSizeHigh) shl 32));
{$ELSE}
    { WARNING: TSearchRec.Size is an integer which limit file size to 2GB }
    { Every file of greater size than 2GB will report an incorrect size   }
    SizeStr := IntToStr(F.Size and $7FFFFFFF);
{$ENDIF}

    if Year = ThisYear then
        TimeStr := Format('%2.2d:%2.2d', [Hour, Min])
    else
        TimeStr := Format('%5d', [Year]);

[COLOR="YellowGreen"]--->[/COLOR] [COLOR="YellowGreen"][COLOR="Blue"]Result := Attr + '   1 ftp      ftp  ' +[/COLOR][/COLOR]
              Format('%11s %s %2.2d %5s ',
                     [SizeStr, StrMonth[Month], Day, TimeStr]) +
              F.Name + #13#10;
end;


повторюсь
Project ftpServer.exe raised ... class ERangeError whit mess Range check error.

p.s {$R-} писал в клиенет не помогло....
6
24 апреля 2008 года
George
4.1K / / 05.01.2007
Похоже у тебя проблема с массивом Attr[]. Какой его размер? И повторюсь - попробуй вписать директиву {$R-}
10K
24 апреля 2008 года
In0stRAnez
66 / / 16.02.2008
Цитата: Washington
Похоже у тебя проблема с массивом Attr[]. Какой его размер? И повторюсь - попробуй вписать директиву {$R-}



незнаю какой размер, как проверить?
и куда писать {$R-} ? я писал в самом верху!
может я чтото не то делаю?

6
24 апреля 2008 года
George
4.1K / / 05.01.2007
{$R-} можешь писать прямо перед строкой, в которой вылетает ошибка.
а размер можешь проверить так:
[highlight=delphi]
ShowMessage(StrToInt(length(Attr)));
[/highlight]
6
24 апреля 2008 года
George
4.1K / / 05.01.2007
Хотя прочитав внимательно код, ошибка вряд ли может быть в Attr[] ибо он небольшой.
10K
24 апреля 2008 года
In0stRAnez
66 / / 16.02.2008
там в компоненте лажа function TFTPServer.GetIcsLogger: TIcsLogger; я просто поудалял и всё гуд стало...
6
24 апреля 2008 года
George
4.1K / / 05.01.2007
[пост зачистил ибо уже не нужен :)]
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог