⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.cpp

📁 关于书籍《Borland c++Builder工程实践》的源代码
💻 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 + -