我从外部服务器ftp'ing文件,然后在外部服务器上删除它们,一个文件失败,因为文件名中有空格。我更改了我的ftp delete命令,在文件名周围加上引号。

ftpStream.WriteLine("delete """ & FileToDelete & """")

但是,用户在创建文件名时可能会使用其他字符,我的程序仍然会阻塞吗?我无法控制这些文件名可能是什么。

(我放了SSIS和SQL Server的标签,因为我正在从SSIS pakcage动态创建ftp任务。双方的操作系统都是Win XP)

有帮助吗?

解决方案

不允许使用文件系统保留的任何字符。这通常包括空格,逗号,斜线,冒号,队列标记,双引号等。但正如JaredPar所提到的,空间可能是唯一的通用攻击者,因为每个文件系统都有自己的一组保留字符并不总是重叠。 / p>

一个好主意是url编码任何ftp或http路径。这会将空格转换为%20,这通常应该被ftp服务器理解。

其他提示

参见FTP RFC的第5.3节(RFC 959)。除了CrLf之外,实际上没有任何非法字符作为文件名的一部分是非法的。

问题在于知道目标服务器将阻塞哪些字符与非法FTP字符。我猜测除了空间之外,没有太多的字符会导致问题。但我不是FTP专家。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top