我的ftp代码有什么问题?

4

我正在使用.NET 2.0中的C#语言尝试上传一个文件。代码看起来没什么问题,但是当我尝试从FtpWebRequest.GetRequestStream方法创建一个流时,它一直失败。

以下是代码:

        FtpWebRequest ftpRequest;
        FtpWebResponse ftpResponse;

        try
        {
            string fileName = Path.GetFileName(strCompleteFilePath);
            ftpRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://myhost/" + fileName));
            ftpRequest.Method = WebRequestMethods.Ftp.UploadFile;
            ftpRequest.Proxy = null;
            ftpRequest.UseBinary = true;
            ftpRequest.Credentials = new NetworkCredential("myUserID", "myPW");
            ftpRequest.KeepAlive = false;

            FileInfo ff = new FileInfo(strCompleteFilePath);
            byte[] fileContents = new byte[ff.Length];

            using (FileStream fr = ff.OpenRead()) 
            {
                fr.Read(fileContents, 0, Convert.ToInt32(ff.Length));
            }

            using (Stream writer = ftpRequest.GetRequestStream())
            {
                writer.Write(fileContents, 0, fileContents.Length);
            }

            ftpResponse = (FtpWebResponse)ftpRequest.GetResponse(); 
        }

And the error....

{System.Net.WebException: The remote server returned an error: (501) Syntax error in parameters or arguments.
   at System.Net.FtpWebRequest.SyncRequestCallback(Object obj)
   at System.Net.FtpWebRequest.RequestCallback(Object obj)
   at System.Net.CommandStream.InvokeRequestCallback(Object obj)
   at System.Net.CommandStream.Abort(Exception e)
   at System.Net.FtpWebRequest.FinishRequestStage(RequestStage stage)
   at System.Net.FtpWebRequest.GetRequestStream()

抱歉,在文件名前面的 / 是有的。我在发布时不小心将其删除了。但是,当我运行代码时,它失败了,/ 还是存在的。 - donde
什么是服务器?这里有一个关于AS/400的问题,可能会有所帮助:http://stackoverflow.com/questions/1930787/ftpwebrequest-connecting-to-an-as-400 - Richard Morgan
5个回答

5

你的路径中缺少了一个 /。

如果你的文件名叫做 "myfile.txt",那么你将要创建的路径是 ftp://myhostmyfile.txt,但我猜应该是 ftp://myhost/myfile.txt

因此,在 ftp://myhost 字符串的末尾添加一个 / 就可以了。


4

这看起来不对:

ftpRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://myhost" + fileName));

除非文件名以/开头,否则我认为你需要添加其中一个,例如:

ftpRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://myhost/" + fileName));

3

这一行:

ftpRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://myhost" + fileName));

如果您的fileName变量没有包含必要的斜杠,则可能会出现问题。


1

尝试

ftpRequest.UsePassive = false;

它对我有效。


1

FTP服务器对.NET生成的STOR命令感到不满意。 最好查看服务器的日志文件。 大胆猜测:路径不同寻常,你通常想指定一个目录名(例如ftp://myhost/somedir/filename


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接