Вот еще проблемка появилась, при создании файлового менеджера.
Вообщем задача: передать названия файлов и папок в нужной мне директории с одного компа и вывести это дело в ListView на другом.
Делаю так:
на обоих компах:
PHP код:
type
FM= packed record
name:string;
size:integer;
folder:boolean;
end;
на сервере(который отправляет):
PHP код:
var
fail:array[0..50] of FM;
procedure TForm1.SendFileList(path:string);
var
sr: TSearchRec;
p:integer;
begin
p:=0;{Собираю названия папок и файлов в в массив fail
if FindFirst(path+'*.*', faAnyFile, sr) = 0 then
begin
repeat
fail[p].name:=SR.Name;
if (SR.Attr = faDirectory) then
fail[p].folder:=true;
Inc(p);
until FindNext(sr) <> 0;
FindClose(sr);
end;
//FsSs.Socket.Connections[0].SendText(inttostr(p-1)+'#');{Отправляю количество файлов и папок в директории, пишет что 24, хотя в реале их 20, включая скрытые файлы}
FsSs.Socket.Connections[0].SendBuf(fail,sizeof(fail));{Отправляю массив}
end;
Далее код клиента:
PHP код:
procedure TForm3.FsCsRead(Sender: TObject; Socket: TCustomWinSocket);
var
FileSystem: array[0..50] of FM;
ListItem: TListItem;
KolElem:integer;
i:integer;
s:string;
size:integer;
begin
s:=Socket.ReceiveText;
KolElem:=strtoint(copy(s,0,pos('#',s)-1)); {принимаю количество элементов}
size:=Socket.ReceiveLength;
Socket.ReceiveBuf(FileSystem,size);
for i:=0 to KolElem-1 do begin{заношу данные в ListView}
ListItem:=ListView1.Items.Add;
ListItem.Caption:=FileSystem[i].name;
ListItem.SubItems.Add(inttostr(FileSystem[i].size));
if FileSystem[i].folder = true then ListItem.SubItems.Add('Папка')
else ListItem.SubItems.Add(' ');
end;
end;
Ничего не передается, только в листвиев добавляется размер, который он непонятно откуда берет, т.к. я его не забивал, там должно быть нулевое значение.
Подскажите где ошибка и как исправить.