CFtpConnection::OpenFile()只能找开现有文件,CFtpConnection::PutFile()是把本地文件拷到FTP上,如果我想直接在FTP建立一个文件怎么办?

解决方案 »

  1.   

    在服务器上建立一个文件应该是可以的,我没有亲自试验,你可以自己试一下,像CFile类可以建立一个新的文件一样,同样有一个CInternetFile,可以实现读写的功能,你可以试一下,也提供
    CInternetFile *ff;
    ff.Open((char*)FileName,CInternetFile::modeCreate¦CInternetFile::modeWrite) 
      

  2.   

    我试了,这种方法不行.CInternetFile不象CFile,必须要指定FTP服务器,要不操作系统哪知道你要在哪个服务器上建立新文件.
      

  3.   

    首先用 CInternetSession::GetFtpConnection 建立ftp联接
    用 CFtpConnection::SetCurrentDirectory 设置当前路径
    然后 CFtpConnection::OpenFile(FILEPATHNAME,GENERIC_WRITE) 建立你想的文件,文件名可以是全路径,也可以只用文件名表示在当前目录下
    接着用 刚才OpenFile 返回的 CInternetFile* 的 CInternetFile::Write(buf,count)方法写数据,
    写完后CInternetFile::Close 即可
      

  4.   

    以下代码经测试通过,我去掉了服务器名和帐号
    有些防火墙不允许外部ftp server流入数据,所以我用了Passive模式,即ftpconn=isession.GetFtpConnection("xxx.xxx.xxx.xxx","","",21,true);里的true
    完整代码如下:#include <afxinet.h>
    void CFtptestDlg::OnBtnftp() 
    {
    // TODO: Add your control notification handler code here
    CInternetSession isession;
    CFtpConnection* ftpconn;
    CInternetFile* ifile;
             //建立ftp连接
    ftpconn=isession.GetFtpConnection("xxx.xxx.xxx.xxx","","",21,true);
    if(!ftpconn)
    {
    TRACE("GetFtpConnection FAILED!\n");
    return;
    }
             //在当前目录(根目录)建立一个文件叫 ftptest.txt
    ifile=ftpconn->OpenFile("ftptest.txt",GENERIC_WRITE);
    if(!ifile)
    {
    TRACE("OpenFile FAILED!\n");
    return;
    }
             //写数据
    ifile->Write("test",4);
    ifile->Close();
    isession.Close();
    }