FileName中存在Space或(%20)时找不到CSV文件名

时间:2015-07-27 09:45:18

标签: c# .net c#-4.0 ftp

我正在尝试使用以下代码读取CSV文件以将其上载到数据库表:

FtpWebRequest reqFTP;
try
{
    reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpPath + fileName));
    reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
    reqFTP.UseBinary = true;
    reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
    int count=0;
    StringBuilder sb = new StringBuilder();
    //GET THE FTP RESPONSE
    using (System.Net.WebResponse tmpRes = reqFTP.GetResponse()) 
    //^^^^^^^^^^^^^^ Error is on this line ^^^^^^^^^^^^^^
    {
        ...
    }
}

当文件名包含空格(有时在调试时显示为%20)时,我收到以下错误:

  

远程服务器返回错误:(550)文件不可用(例如,文件没有>找到,没有访问权限。)

如果文件名不包含空格或%20,则可以正常读取。

该任务涉及读取文件解析内容,将数据保存在数据库中,然后将文件移动到另一个文件夹中。

1 个答案:

答案 0 :(得分:0)

每当您收集或设置文件名时,请尝试以下操作:

if (filename.Contains("%20"))
    {
        filename= filename.Replace("%20", ' ');
    }

如果您计划之后移动文件,请确保在移动之前完成相反的操作。在你的情况下:

s = """MTH|lettersandnumbersHST|lettersandnumbersENG|lettersandnumbers
MTH|lettersandnumbersHST|lettersandnumbersENG|lettersandnumbers
MTH|lettersandnumbersHST|"""

r= re.compile("([A-Z]+\|[0-9a-z]+|[A-Z]+\|)",)
for line in s.splitlines(True):
    print("\n".join(r.findall(line)))

这个想法可以扩展为所有不可接受的字符,如“#”,“”或“\”等等。