📄 unit1.cpp
字号:
// FTP Client
// 2002-11-04
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
//连接或断开与服务器的连接
void __fastcall TForm1::Button1Click(TObject *Sender)
{
//获取登录信息并连接服务器
if(Button1->Caption=="Connect")
{
NMFTP1->Host=Edit1->Text;
NMFTP1->Port=StrToInt(Edit2->Text);
NMFTP1->UserID=Edit3->Text;
NMFTP1->Password=MaskEdit1->Text;
StatusBar1->SimpleText="Connecting to FTP server ...";
NMFTP1->ParseList =true;
NMFTP1->Connect();
}
//断开
else
{
StatusBar1->SimpleText="Disconnecting from FTP server ...";
NMFTP1->Disconnect();
}
}
//---------------------------------------------------------------------------
//连接成功的事件处理;
void __fastcall TForm1::NMFTP1Connect(TObject *Sender)
{
RadioButton1->Enabled=true;
RadioButton2->Enabled=true;
Button2->Enabled=true;
Button3->Enabled=true;
Button4->Enabled=true;
Button5->Enabled=true;
Button6->Enabled=true;
Button7->Enabled=true;
Button8->Enabled=true;
Button9->Enabled=true;
Button10->Enabled=true;
rename->Enabled=true;
Memo1->Lines->Add("Connected");
Button1->Caption="Disconnect";
}
//---------------------------------------------------------------------------
// 断开连接的事件的处处理
void __fastcall TForm1::NMFTP1Disconnect(TObject *Sender)
{
RadioButton1->Enabled=false;
RadioButton2->Enabled=false;
Button2->Enabled=false;
Button3->Enabled=false;
Button4->Enabled=false;
Button5->Enabled=false;
Button6->Enabled=false;
Button7->Enabled=false;
Button8->Enabled=false;
Button9->Enabled=false;
Button10->Enabled=false;
rename->Enabled=false;
Memo1->Lines->Add("Disconnected");
Button1->Caption="Connect";
}
//---------------------------------------------------------------------------
// 事件OnSuccess处理
void __fastcall TForm1::NMFTP1Success(TCmdType Trans_Type)
{
int I;
switch(Trans_Type)
{
case cmdList: //LIST
{
for (I = 0; I <= (StringGrid1->ColCount - 1);I++)
StringGrid1->Cols[I]->Clear();
StringGrid1->RowCount = NMFTP1->FTPDirectoryList->name->Count;
StringGrid1->ColCount = 4;
StringGrid1->Cells[0][0] = "Filename";
StringGrid1->Cells[1][0] = "File Size";
StringGrid1->Cells[2][0] = "Modified Date";
StringGrid1->Cells[3][0] = "Attributes";
for (I = 0; I <= (NMFTP1->FTPDirectoryList->name->Count - 1); I++)
{
StringGrid1->Cells[0][I+1] = NMFTP1->FTPDirectoryList->name->Strings[I];
StringGrid1->Cells[1][I+1] = NMFTP1->FTPDirectoryList->Size->Strings[I];
StringGrid1->Cells[2][I+1] = NMFTP1->FTPDirectoryList->ModifDate->Strings[I];
StringGrid1->Cells[3][I+1] = NMFTP1->FTPDirectoryList->Attribute->Strings[I];
}
}
Memo1->Lines->Add("List");
break;
case cmdChangeDir: //改变当前路径
{
Memo1->Lines->Add("ChangeDir successful");
NMFTP1->List();
}
break;
case cmdMakeDir: //生成新路径
Memo1->Lines->Add("MakeDir successful"); break;
case cmdRemoveDir://删除路径
Memo1->Lines->Add("RemoveDir successful"); break;
case cmdDelete: //删除文件
Memo1->Lines->Add("Delete successful"); break;
case cmdRename: //重命名文件
Memo1->Lines->Add("Rename successful"); break;
case cmdReInit: //更新
Memo1->Lines->Add("Reinitialize successful"); break;
case cmdCurrentDir: //显示当前路径
Memo1->Lines->Add("CurrentDir successful");break;
}
}
//---------------------------------------------------------------------------
// TNMFTP控件的错误处理;
void __fastcall TForm1::NMFTP1Error(TComponent *Sender, WORD Errno,
AnsiString Errmsg)
{
Memo1->Lines->Add(Errmsg);
}
//---------------------------------------------------------------------------
// 调用显示文件与路径方法
void __fastcall TForm1::Button2Click(TObject *Sender)
{
NMFTP1->List();
}
//---------------------------------------------------------------------------
//改变当前路径
void __fastcall TForm1::Button3Click(TObject *Sender)
{
AnsiString TheDir;
if (InputQuery("Change Directory", "Which directory?", TheDir))
NMFTP1->ChangeDir(TheDir);
}
//---------------------------------------------------------------------------
//在FTP服务器上删除一个文件
void __fastcall TForm1::Button4Click(TObject *Sender)
{
AnsiString TheFile;
if (InputQuery("Delete File", "File name?", TheFile))
NMFTP1->Delete(TheFile);
}
//---------------------------------------------------------------------------
//从FTP服务器下载一个文件;
void __fastcall TForm1::Button5Click(TObject *Sender)
{
AnsiString RemoteFile,LocalFile;
if(InputQuery("Download a file","File to download: ",RemoteFile))
{
SaveDialog1->Execute();
LocalFile=SaveDialog1->FileName;
NMFTP1->Download(RemoteFile,LocalFile);
}
}
//---------------------------------------------------------------------------
//上传一个文件;
void __fastcall TForm1::Button6Click(TObject *Sender)
{
AnsiString LocalFile,RemoteFile;
int FileHandle,FSize;
if(OpenDialog1->Execute())
if(InputQuery("Choose Remote File Name","Filename?",RemoteFile))
{
LocalFile=OpenDialog1->FileName;
FileHandle=FileOpen(LocalFile,fmOpenRead);
FSize=FileSeek(FileHandle,0,2);
FileClose(FileHandle);
NMFTP1->Allocate(FSize);
NMFTP1->Upload(LocalFile,RemoteFile);
NMFTP1->List();
}
}
//---------------------------------------------------------------------------
// 清空交互信息框内的所有内容;
void __fastcall TForm1::Button7Click(TObject *Sender)
{
Memo1->Clear();
}
//---------------------------------------------------------------------------
//把文件传输模式设为变为二进制;
void __fastcall TForm1::RadioButton1Click(TObject *Sender)
{
NMFTP1->Mode(MODE_BYTE);
}
//---------------------------------------------------------------------------
//把文件模式设为ASCII码
void __fastcall TForm1::RadioButton2Click(TObject *Sender)
{
NMFTP1->Mode(MODE_ASCII);
}
//---------------------------------------------------------------------------
// 操作失败处理
void __fastcall TForm1::OnFTPFaile(bool &Handled, TCmdType Trans_Type)
{
switch(Trans_Type)
{
case cmdChangeDir: Memo1->Lines->Add("ChangeDir failed");
break;
case cmdMakeDir: Memo1->Lines->Add("MakeDir failed");
break;
case cmdDelete: Memo1->Lines->Add("Delete failed");
break;
case cmdRemoveDir: Memo1->Lines->Add("RemoveDir failed");
break;
case cmdList: Memo1->Lines->Add("List failed");
break;
case cmdRename: Memo1->Lines->Add("Rename failed");
break;
case cmdUpRestore: Memo1->Lines->Add("UploadRestore failed");
break;
case cmdDownRestore: Memo1->Lines->Add("DownloadRestore failed");
break;
case cmdDownload: Memo1->Lines->Add("Download failed");
break;
case cmdUpload: Memo1->Lines->Add("Upload failed");
break;
case cmdAppend: Memo1->Lines->Add("UploadAppend failed");
break;
case cmdReInit: Memo1->Lines->Add("Reinitialize failed");
break;
case cmdAllocate: Memo1->Lines->Add("Allocate failed");
break;
case cmdNList: Memo1->Lines->Add("NList failed");
break;
case cmdDoCommand: Memo1->Lines->Add("DoCommand failed");
break;
case cmdCurrentDir: Memo1->Lines->Add("CurrentDir failed");
break;
}
}
//---------------------------------------------------------------------------
// 处理OnOnPacketRecvd事件在状态栏显示接收字节数;
void __fastcall TForm1::OPacketReceive(TObject *Sender)
{
StatusBar1->SimpleText = "Received "+IntToStr(NMFTP1->BytesRecvd)+" bytes of "+IntToStr(NMFTP1->BytesTotal)+" total";
}
//---------------------------------------------------------------------------
//处理OnPacketSent事件在状态栏显示发送字节数;
void __fastcall TForm1::NMFTP1PacketSent(TObject *Sender)
{
StatusBar1->SimpleText = "Sent "+IntToStr(NMFTP1->BytesSent)+" bytes of "+IntToStr(NMFTP1->BytesTotal)+" total";
}
//---------------------------------------------------------------------------
//处理 OnTransactionStart事件,当有字节从服务器传到本地时发生
void __fastcall TForm1::NMFTP1TransactionStart(TObject *Sender)
{
Memo1->Lines->Add("Data transfer start");
}
//---------------------------------------------------------------------------
//处理 OnTransactionStop事件,数据传送完毕;
void __fastcall TForm1::NMFTP1TransactionStop(TObject *Sender)
{
Memo1->Lines->Add("Data transfer end");
}
//---------------------------------------------------------------------------
//处理OnUnSupportedFunction事件
void __fastcall TForm1::NMFTP1UnSupportedFunction(TCmdType Trans_Type)
{
switch(Trans_Type)
{
case cmdChangeDir:
Memo1->Lines->Add("ChangeDir not supported by this server");
break;
case cmdMakeDir:
Memo1->Lines->Add("MakeDir not supported by this server");
break;
case cmdDelete:
Memo1->Lines->Add("Delete not supported by this server");
break;
case cmdRemoveDir:
Memo1->Lines->Add("RemoveDir not supported by this server");
break;
case cmdList:
Memo1->Lines->Add("List not supported by this server");
break;
case cmdRename:
Memo1->Lines->Add("Rename not supported by this server");
break;
case cmdUpRestore:
Memo1->Lines->Add("UploadRestore not supported by this server");
break;
case cmdDownRestore:
Memo1->Lines->Add("DownloadRestore not supported by this server");
break;
case cmdDownload:
Memo1->Lines->Add("Download not supported by this server");
break;
case cmdUpload:
Memo1->Lines->Add("Upload not supported by this server");
break;
case cmdAppend:
Memo1->Lines->Add("UploadAppend not supported by this server");
break;
case cmdReInit:
Memo1->Lines->Add("Reinitialize not supported by this server");
break;
case cmdAllocate:
Memo1->Lines->Add("Allocate not supported by this server");
break;
case cmdNList:
Memo1->Lines->Add("NList not supported by this server");
break;
case cmdDoCommand:
Memo1->Lines->Add("DoCommand not supported by this server");
break;
case cmdCurrentDir:
Memo1->Lines->Add("CurrentDir not supported by this server");
break;
}
}
//---------------------------------------------------------------------------
//处理OnAuthenticationNeeded事件;
void __fastcall TForm1::NMFTP1AuthenticationNeeded(bool &Handled)
{
AnsiString APass, AnID;
if (NMFTP1->Password == "")
if (InputQuery("Password needed", "Enter password: ", APass))
{
NMFTP1->Password = APass;
Handled = TRUE;
}
else
Handled = FALSE;
if (NMFTP1->UserID == "")
if (InputQuery("User ID needed", "Enter User ID: ", AnID))
{
NMFTP1->UserID = AnID;
Handled = TRUE;
}
else
Handled = FALSE;
}
//---------------------------------------------------------------------------
//处理OnAuthenticationFailed事件;
void __fastcall TForm1::NMFTP1AuthenticationFailed(bool &Handled)
{
AnsiString ThePass, TheID;
if (MessageDlg("Authentication Failed. Retry?", mtConfirmation, TMsgDlgButtons() << mbYes << mbNo, 0) == mrYes)
{
ThePass = NMFTP1->Password;
TheID = NMFTP1->UserID;
InputQuery("Reauthenticate", "Enter User ID", TheID);
InputQuery("Reauthenticate", "Enter Password", ThePass);
NMFTP1->Password = ThePass;
NMFTP1->UserID = TheID;
Handled = TRUE;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RemoveDirectory(TObject *Sender)
{
// AnsiString TheDir;
// if (InputQuery("Remove Directory", "Directory name?", TheDir))
// NMFTP1->RemoveDir(TheDir);
}
//---------------------------------------------------------------------------
//修改文件名;
void __fastcall TForm1::Remname(TObject *Sender)
{
AnsiString OldFile, NewFile;
if (InputQuery("Rename file", "File to rename?", OldFile))
if (InputQuery("Rename file", "New file name?", NewFile))
NMFTP1->Rename(OldFile, NewFile);
}
//---------------------------------------------------------------------------
//更新
void __fastcall TForm1::Reinitialize(TObject *Sender)
{
ShowMessage("After reinitilizing, you must click the authenticate button");
NMFTP1->Reinitialize();
}
//---------------------------------------------------------------------------
// 更新登录信息;
void __fastcall TForm1::Authentication(TObject *Sender)
{
AnsiString AnID, APass;
if (InputQuery("Authentication needed", "Enter User ID", AnID))
if (InputQuery("Authentication needed", "Enter Password", APass))
{
NMFTP1->DoCommand("USER "+AnID);
NMFTP1->DoCommand("PASS "+APass);
}
}
//---------------------------------------------------------------------------
//显示当前路径;
void __fastcall TForm1::CurrentDir(TObject *Sender)
{
ShowMessage(NMFTP1->CurrentDir);
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -