Witam. Mam problem z uruchomieniem serwera FTP. Wykorzystałem komponenty INDY 10 z Delphi 7 Enterprise. Nie mam pojęcia jak ustawić domyślny folder, dysk serwera. Gdy klient się loguje jestem w katalogu '' a chcę być np. w 'C:". Co mam zmienić? Oto server:
var
Form1: TForm1;
folder : string;
implementation
{$R *.dfm}
procedure TForm1.IdFTPServer1ListDirectory(ASender: TIdFTPServerThread;
const APath: String; ADirectoryListing: TIdFTPListItems);
var
LFTPItem :TIdFTPListItem;
SR : TSearchRec;
SRI : Integer;
begin
SRI := FindFirst(Folder + 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(Folder + APath + '\..');
end;
procedure TForm1.IdFTPServer1UserLogin(ASender: TIdFTPServerThread;
const AUsername, APassword: String; var AAuthenticated: Boolean);
begin
//sprawdzenie użytkownika
AAuthenticated := ((AUsername = 'albert') and (APassword = 'aaa'));
if AAuthenticated = true then
begin
end;
end;
procedure TForm1.IdFTPServer1AfterUserLogin(ASender: TIdFTPServerThread);
begin
ASender.HomeDir := '\';
ASender.CurrentDir := 'C:\';
end;
procedure TForm1.IdFTPServer1StoreFile(ASender: TIdFTPServerThread;
const AFileName: String; AAppend: Boolean; var VStream: TStream);
begin
folder :=ExtractFilePath(ParamStr(0));
//zmienną appdir można zdefiniować jako public
//oraz w obsłudze zdarzenia OnAfterLogin podstawić wartość jak powyżej
//odbieranie pliku
if not Aappend then
begin
//odbieranie pliku - nowy plik
VStream := TFileStream.Create(folder + AFilename,fmCreate);
end;
if Aappend then
begin
//odbieranie pliku - nadpisywanie istniejącego
VStream := TFileStream.Create(folder + AFilename,fmOpenWrite);
end;
end;
procedure TForm1.IdFTPServer1RetrieveFile(ASender: TIdFTPServerThread;
const AFileName: String; var VStream: TStream);
var
appdir : string;
begin
appdir :=ExtractFilePath(ParamStr(0));
//zmienną appdir można zdefiniować jako public
//oraz w obsłudze zdarzenia OnAfterLogin podstawić wartość jak powyżej
//wysyłanie pliku
VStream := TFileStream.Create(AppDir + AFilename,fmOpenRead);
Application.ProcessMessages;
end;
procedure TForm1.IdFTPServer1ChangeDirectory(ASender: TIdFTPServerThread;
var VDirectory: String);
begin
//zmiana katalogu
Asender.CurrentDir := VDirectory;
end;
procedure TForm1.IdFTPServer1MakeDirectory(ASender: TIdFTPServerThread;
var VDirectory: String);
begin
//tworzenie katalogu
if not ForceDirectories(folder + VDirectory) then
begin //można dodać komunikat błędu na serwerze
end;
end;