Использую Indy_10_FTPServer пример, в примере можно открыть определенную папку,
procedure TForm1.FormCreate(Sender: TObject);
begin
AppDir := ExtractFilePath(Application.Exename);
end;
procedure TForm1.IdFTPServer1ListDirectory(ASender: TIdFTPServerContext;
const APath: string; ADirectoryListing: TIdFTPListOutput; const ACmd,
ASwitches: string);
var
LFTPItem :TIdFTPListItem;
SR : TSearchRec;
SRI : Integer;
begin
ADirectoryListing.DirFormat := doUnix;
SRI := FindFirst(AppDir + APath + '\*.*', faAnyFile - faHidden - faSysFile, SR);
While SRI = 0 do
begin
LFTPItem := ADirectoryListing.Add;
LFTPItem.FileName := SR.Name;
LFTPItem.Size := SR.Size;
LFTPItem.ModifiedDate := FileDateToDateTime(SR.Time);
if SR.Attr = faDirectory then
LFTPItem.ItemType := ditDirectory
else
LFTPItem.ItemType := ditFile;
SRI := FindNext(SR);
end;
FindClose(SR);
SetCurrentDir(AppDir + APath + '\..');
end;
Как открыть все диски, добавил по циклу диски, листинг при заходе показывает, но вот работы с файлами нет, так как
procedure TForm1.IdFTPServer1StoreFile(ASender: TIdFTPServerContext;
const AFileName: string; AAppend: Boolean; var VStream: TStream);
begin
if not Aappend then
VStream := TFileStream.Create(ReplaceChars(AppDir+AFilename),fmCreate)
else
VStream := TFileStream.Create(ReplaceChars(AppDir+AFilename),fmOpenWrite)
end;
Из-за того, что AppDir константа.
Допустим AppDir = "c:\" тогда работа с файлами будет доступна на диске С, а на диске Д следовательно не будет.
Есть ли более расширенные примеры работы с IdFTPServer интересует расшаривание директорий по списку.