当前位置:编程学习 > C#/ASP.NET >>

C#操作FTP报错,无论上传、下载、创建、删除,都是一个错误【远程服务器返回错误:(550) 文件不可用(例如,未找到文件,无法访问文件)】

C#操作FTP全部都是报这一个错误,无论上传、下载、创建目录、删除文件等,用户有做这些操作的权限,路径正确,我把路径放在IE中是可用的,请大神们帮忙看看。感激不尽。
FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://10.112.9.74/etldata/OAS/PREPARE/20130109/a.txt"));
ftp.Credentials = new NetworkCredential("ftpuser", "ftpuser");
ftp.Method = WebRequestMethods.Ftp.DownloadFile;
FtpWebResponse res = ftp.GetResponse() as FtpWebResponse; //无论上传、下载、创建、删除都是此处报错,错误:远程服务器返回错误:(550) 文件不可用(例如,未找到文件,无法访问文件)
Stream responseStream = res.GetResponseStream();


FPT C# WebRequest  --------------------编程问答-------------------- 看您写的代码,FtpWebRequest中传的URI是对应的txt文件,您确定没写错吗? --------------------编程问答-------------------- 那代码是下载的,如果是其他的操作URL我会改成相应的 --------------------编程问答-------------------- 路径的大小写没错吗? --------------------编程问答-------------------- 路径大小写没有问题 --------------------编程问答--------------------
//上传代码
 string filename = Path.GetFileName(source);//获取文件名
            string ftpfullpath = "ftp://192.168.58.234:21/";
            FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create(ftpfullpath + filename);
            ftp.Credentials = new NetworkCredential("user", "password");
            ftp.KeepAlive = true;
            ftp.UseBinary = true;
            ftp.Method = WebRequestMethods.Ftp.UploadFile;
            FileStream fs = File.OpenRead(source);
            byte[] buffer = new byte[fs.Length];
            fs.Read(buffer, 0, buffer.Length);
            fs.Close();
            Stream ftpstream = ftp.GetRequestStream();
            ftpstream.Write(buffer, 0, buffer.Length);
            flag = true;
            ftpstream.Close();
--------------------编程问答--------------------
 /// <summary>
    /// Ftp断点续传 下载
    /// </summary>
    /// <param name="filename">文件名</param>
    /// <param name="Directory">本地路径</param>
    /// <returns></returns>
    public bool DownloadFileToFTP(string filename, string Directory)
    {
        bool flag = false; ;
        Uri u = new Uri(ftpurl + filename);
        string downFile = Directory + filename;
        //FtpWebRequest的作成
        FtpWebRequest ftpReq = (FtpWebRequest)WebRequest.Create(u);
        //设定用户名和密码
        ftpReq.Credentials = new NetworkCredential(ftpusername, ftppassword);
        //Method WebRequestMethods.Ftp.DownloadFile("RETR")设定
        ftpReq.Method = WebRequestMethods.Ftp.DownloadFile;
        //要求终了后关闭连接
        ftpReq.KeepAlive = false;
        //使用ASCII方式传送
        ftpReq.UseBinary = false;
        //设定PASSIVE方式无效
        ftpReq.UsePassive = false;
        //判断是否继续下载
        //继续写入下载文件的FileStream
        FileStream fs;
        try
        {
            if (File.Exists(downFile))
            {
                //继续下载
                ftpReq.ContentOffset = (new FileInfo(downFile)).Length;
                fs = new FileStream(
                    downFile, FileMode.Append, FileAccess.Write);
            }
            else
            {
                //一般下载
                fs = new FileStream(
                    downFile, FileMode.Create, FileAccess.Write);
            }

            //取得FtpWebResponse
            FtpWebResponse ftpRes = (FtpWebResponse)ftpReq.GetResponse();
            //为了下载文件取得Stream
            Stream resStrm = ftpRes.GetResponseStream();
            //写入下载的数据
            byte[] buffer = new byte[1024];
            while (true)
            {
                int readSize = resStrm.Read(buffer, 0, buffer.Length);
                if (readSize == 0)
                    break;
                fs.Write(buffer, 0, readSize);
            }
            fs.Close();
            resStrm.Close();
            //表示从FTP服务器被送信的状态
            Console.WriteLine("{0}: {1}", ftpRes.StatusCode, ftpRes.StatusDescription);
            //关闭连接
            ftpRes.Close();
            flag = true;
        }
        catch (Exception)
        {
            throw;
        }
        return flag;
    }
--------------------编程问答-------------------- 1.是不是本地文件夹的权限不够 
在文件夹属性中的安全选项中,把Everyone用户给所有权限 
2.地址可能有错误,看看目录存不存在, 是不是你的帐户虽然有上传文件的权限,但是没有建立目录的权限?
查看抛出的异常具体信息  --------------------编程问答--------------------  550 Requested action not taken. File unavailable (e.g., file not found, no access).
  请求操作未被执行,文件不可用。
是不是上传的文件有问题哦? --------------------编程问答-------------------- 用户的权限是没有问题的,可用建立目录之类的操作 --------------------编程问答--------------------
引用 5 楼 wzp646011267 的回复:
C# code?12345678910111213141516//上传代码 string filename = Path.GetFileName(source);//获取文件名            string ftpfullpath = "ftp://192.168.58.234:21/";            FtpWebRequest ftp = (FtpWeb……


这个还是会报一样才错误 --------------------编程问答-------------------- 原因我已经找到了,是因为ftp的默认目录引发的,如,ftp的默认目录是文件夹中A\B,创建ftp连接时默认连接到这个目录来了,而B文件夹下没有etldata目录,所以报错了,而etldata目录是与A目录平级的,请问怎么返回到A目录呢或者是etldata目录呢,求帮助 --------------------编程问答--------------------
引用 11 楼 qiangzi0815 的回复:
原因我已经找到了,是因为ftp的默认目录引发的,如,ftp的默认目录是文件夹中A\B,创建ftp连接时默认连接到这个目录来了,而B文件夹下没有etldata目录,所以报错了,而etldata目录是与A目录平级的,请问怎么返回到A目录呢或者是etldata目录呢,求帮助


做不到。

ftp不支持你在客户端文件路径里弄个..之类的东西的。 --------------------编程问答-------------------- 楼主解决问题没啊?
我也遇到这个问题了 --------------------编程问答-------------------- 我去 我也遇到这个问题了 --------------------编程问答-------------------- 上面的大哥们,我也遇到了这个问题。。。。都不知道怎么回事了,我别人的电脑上都没有问题,,今天刚刚发布到服务器上面就有问题了。。。难不成和服务器有关系呀。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,