远程服务器返回错误:(553)不允许使用文件名[C#][FTP]

远程服务器返回错误:(553)不允许使用文件名[C#][FTP],c#,ftp,C#,Ftp,我正在编写一个程序,将文件从USB复制到FTP服务器,这是代码的一部分: private const string ftp_url=@”ftp://an_ip_addrs/X"; 私有静态无效上载(字符串sourceDir) { 使用(WebClient=newWebClient()) { 尝试 { client.Credentials=新的网络凭据(ftp\u用户名,ftp\u psw); foreach(Directory.GetFiles(sourceDir)中的var文件名) { Con

我正在编写一个程序,将文件从USB复制到FTP服务器,这是代码的一部分:

private const string ftp_url=@”ftp://an_ip_addrs/X";
私有静态无效上载(字符串sourceDir)
{
使用(WebClient=newWebClient())
{
尝试
{
client.Credentials=新的网络凭据(ftp\u用户名,ftp\u psw);
foreach(Directory.GetFiles(sourceDir)中的var文件名)
{
Console.WriteLine(“准备上载-->”+文件名);
client.UploadFile(ftp_url,WebRequestMethods.ftp.UploadFile,文件名);
WriteLine(“上传文件!”);
}
}捕获(例外e)
{
Console.WriteLine(“errftp-->”+e);
}
}
}
这是准备上载的
的输出:

Preparing to upload --> C:\Users\aimproxy\jn54comu\FASM - Copy (10).PDF
实际上,我从
try catch块中得到这个错误:

“Err FTP-->System.Net.WebException:远程服务器返回错误:(553)不允许使用文件名。
位于System.Net.WebClient.UploadFile(Uri地址、字符串方法、字符串文件名)
位于System.Net.WebClient.UploadFile(字符串地址、字符串方法、字符串文件名)
在C:\Users\aimproxy\Desktop\Program.cs中的usb\u backdoor\u csharp.Program.Upload(字符串sourceDir)中:第29行
根据请求,这是ftp.exe的输出

已连接到192.168.1.5。
220欢迎使用虚拟FTP服务。
503用户预期。
用户(192.168.1.5:(无)):上传
请输入密码。
230用户已登录。
ftp>目录
200端口192.168.1.67:59392正常
150二进制数据连接已建立。
drwxrwxrwx 2 0 0 4096年4月22日18:07 X
已提交226份目录清单。
ftp:在0.02秒内接收135个字节,7.50KB/秒。
问题在于需要一个完整的目标文件路径,即包括目标文件名。您正在传递目标文件夹,并希望它重用源文件名-这是合理的,我很惊讶这不起作用。文档中肯定没有明确说明这一点

正如在评论中所讨论的,这对您很有效:

client.UploadFile(Path.Combine(ftp_url, Path.GetFileName(filename)), filename);
不过,我更喜欢URL组合函数,而不是路径组合函数,例如-类似于:

client.UploadFile(new Uri(new Uri(ftp_url), Path.GetFileName(filename)), filename);

您看过这篇文章了吗?服务器不喜欢文件名,这意味着a)服务器没有运行Windows,您正在向其传递Windows文件名;或者b)您在服务器上传递的文件位置无效。根据您提供的信息,这些问题都无法解决,因为我们不知道是什么原因在操作系统上,服务器正在运行,但您没有在帖子中提供失败的文件名示例。什么是
ftp://an_ip_addrs//X
?如果出于隐私/安全原因删除了URL的某些部分,请使用一个合理的示例替换它。而不是
//X
。首先删除
///code>之前的
//X
(URL中没有双斜杠,只有原型后面的斜杠)。
ftp://
正确,
an\u ip\u arrds//X
不正确。您可能需要在末尾提供一个
/
(在
/X
之后)。如果这不起作用,则您需要回答问题,以包括文件的实际路径,以及您尝试上载的实际文件名。您没有提供任何相关详细信息。请尝试使用命令提示符和
ftp.exe
,以查看是否可以从中找到正确的路径和文件名名称,然后您就知道当您的代码发送它时它需要如何显示。