使用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)); // } //} }
SendCommand("STOR " + Path.GetFileName(strFileName));
应该是这段代码的问题,查一下你的 SendCommand 是以什么编码发送命令的。
服务器和客户端应该保持一致的编码方式。
FTP应该可以通过设置支持中文字符。
这是我发送命令的编码:
/// <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: 肯定不能用 ASCII 编码,你换 UTF-8 试试。
@程序猿.码农: 真的,谢谢您哈!可以了,改成用gb2312的就可以了,用UTF-8,可以传到服务器上,但是文件名是乱码的,谢谢!
我该为utf-8的后为什么传word文档的名称全是中文也同样报550错误,是咋回事呢