首页 新闻 会员 周边

急求C# Ftp上传类上传中文名文件出现错误,返回响应码550的解决方案!

0
悬赏园豆:100 [已解决问题] 解决于 2012-08-09 14:44

使用C#的FTP上传类,上传英文名称的文件都可以上传,可是上传中文名的文件的时候,就报550错误!急求解决方案! 上传代码如下:

/// <summary>
        /// 上传一个文件
        /// </summary>
        /// <param name="strFileName">本地文件名</param>
        public void Put(string strFileName)
        {
            if (!bConnected)
            {
                Connect();
            }
            Socket socketData = CreateDataSocket();
            SendCommand("TYPE I");
            if (iReplyCode != 200)
            {
                throw new IOException(strReply.Substring(4));
            }
            SendCommand("STOR " + Path.GetFileName(strFileName));
            if (!(iReplyCode == 125 || iReplyCode == 150))
            {
                throw new IOException(strReply.Substring(4));
            }
            FileStream input = new FileStream(strFileName, FileMode.Open);
            int iBytes = 102400;
            while ((iBytes = input.Read(buffer, 0, buffer.Length)) > 0)
            {
                socketData.Send(buffer, iBytes, 0);
            }
            input.Close();
            if (socketData.Connected)
            {
                socketData.Close();
            }
            ReadReply();
            //if (!(iReplyCode == 226 || iReplyCode == 250))
            //{
            //    ReadReply();
            //    if (!(iReplyCode == 226 || iReplyCode == 250))
            //    {
            //        throw new IOException(strReply.Substring(4));
            //    }
            //}
        }
weilinlin的主页 weilinlin | 初学一级 | 园豆:14
提问于:2012-08-09 10:52
< >
分享
最佳答案
1

SendCommand("STOR " + Path.GetFileName(strFileName));

应该是这段代码的问题,查一下你的 SendCommand 是以什么编码发送命令的。

服务器和客户端应该保持一致的编码方式。

FTP应该可以通过设置支持中文字符。

收获园豆:100
Launcher | 高人七级 |园豆:45045 | 2012-08-09 10:58

这是我发送命令的编码:

/// <summary>
        /// 发送命令并获取应答码和最后一行应答字符串
        /// </summary>
        /// <param name="strCommand">命令</param>
        private void SendCommand(String strCommand)
        {
            Byte[] cmdBytes =Encoding.ASCII.GetBytes((strCommand + "\r\n").ToCharArray());
            socketControl.Send(cmdBytes, cmdBytes.Length, 0);
            ReadReply();
        }
weilinlin | 园豆:14 (初学一级) | 2012-08-09 11:03

@weilinlin: 肯定不能用 ASCII 编码,你换 UTF-8 试试。

Launcher | 园豆:45045 (高人七级) | 2012-08-09 11:50

@程序猿.码农: 真的,谢谢您哈!可以了,改成用gb2312的就可以了,用UTF-8,可以传到服务器上,但是文件名是乱码的,谢谢!

weilinlin | 园豆:14 (初学一级) | 2012-08-09 14:43
其他回答(1)
0

我该为utf-8的后为什么传word文档的名称全是中文也同样报550错误,是咋回事呢

hongsedigua | 园豆:152 (初学一级) | 2014-09-02 09:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册