如何使用FTPWEBREQUEST上传非默认目录中的文件?

时间:2011-07-20 08:42:41

标签: c# ftpwebrequest

当我尝试在服务器的非默认目录中上传文件时,我遇到了一个问题。

当我使用“ftp://server01/autofile/test.zip”时,文件上传没有任何问题,因为自动文件是默认目录。

但是当我使用下面的代码时,我得到一个异常,说“远程服务器返回错误:(550)文件不可用(例如,找不到文件,没有访问权限)。”。下面显示的是我使用的代码段。

string inputfilepath = "E:\\Test\\test.ZIP";
string ftpfullpath = "ftp://server01/../bcp/ftp/ftpsftiu/test.ZIP";
FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create(ftpfullpath);
ftp.Method = WebRequestMethods.Ftp.UploadFile;
ftp.Credentials = new NetworkCredential("Username", "password");
ftp.UsePassive = true;
ftp.KeepAlive = true;
ftp.UseBinary = true;
FileStream fs = File.OpenRead(inputfilepath);
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, buffer.Length);
fs.Close();
Stream reqStream = ftp.GetRequestStream();

但我可以通过Windows的Run命令打开上面的非默认目录路径(ftp://server01/../bcp/ftp/ftpsftiu/test.ZIP)。

如何通过C#代码将文件上传到服务器的这个非默认目录? 请帮我解决这个问题。

提前致谢!!!

关于, 沙都

1 个答案:

答案 0 :(得分:1)

如果我在服务器之后添加另一个斜杠(// server //),它对我有用。 我(也)完全限定了输出路径名。 静态GetCread()是对本土类的方法调用。

示例:

static void Main(string[] args)
  {
     string strSystem = "MAPS";
     FtpWebRequest req = (FtpWebRequest)WebRequest.Create("ftp://" + strSystem +"//export/home/hinest/science/trans/fred.txt");
     req.Credentials = CGetCred.GetCred(strSystem);
     req.Method = WebRequestMethods.Ftp.UploadFile;
     FtpWebResponse resp = (FtpWebResponse)req.GetResponse();
     StreamWriter fileOut = new StreamWriter(req.GetRequestStream());
     StreamReader fileIn = new StreamReader(@"c:\science\"+strSystem+".txt");
     while (!fileIn.EndOfStream)
     {
        fileOut.WriteLine(fileIn.ReadLine());
     }
     fileIn.Close();
     fileOut.Close();
     resp.Close();
  }