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;
FTP
но недавно открыл сорс ничего не изменив компельнул и бац какаето ошибка (Failed: Range chek error.), но это ещё не всё, я подумал что раньше чтото менял и сохранил, удалил этот исход и вытащил тот же самый только чистый исход сервера и клиента из архива, он должен работать на 100%
но ошибка повторяется.... я уже даже фаервол выключил... незнаю что и делать!
в чём может быть проблема? Помогите плиз.
Я с такой жестью не сталкивался, но твоём месте попробывал бы {$R-}
B вообще код давай, где ошибка то выскакивает.
вот короче
Код:
как я заметил конетктит он норм, но начинает тупить на процедуре ChageDir - тут по идее должно в клиент загружать все папки и файлы, чтобы их видно было...
Попробуй либо {$R-}, либо просто отлови эту ошибку в процедуре. Может поможет.
происходит при коннекте клиента к серверу
Код:
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;
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-} писал в клиенет не помогло....
Похоже у тебя проблема с массивом Attr[]. Какой его размер? И повторюсь - попробуй вписать директиву {$R-}
Цитата: Washington
Похоже у тебя проблема с массивом Attr[]. Какой его размер? И повторюсь - попробуй вписать директиву {$R-}
незнаю какой размер, как проверить?
и куда писать {$R-} ? я писал в самом верху!
может я чтото не то делаю?
а размер можешь проверить так:
[highlight=delphi]
ShowMessage(StrToInt(length(Attr)));
[/highlight]
Хотя прочитав внимательно код, ошибка вряд ли может быть в Attr[] ибо он небольшой.
там в компоненте лажа function TFTPServer.GetIcsLogger: TIcsLogger; я просто поудалял и всё гуд стало...
[пост зачистил ибо уже не нужен :)]