2009-11-03 292 views
5

我正在寻找一个字符来使用文件名分隔符(我在一个明文字符串中存储多个文件名)。的Windows似乎没有允许:?*<>"|,在文件名中/\。显然,\/不能使用,因为它们是指路径内的某些东西。有什么理由不使用这些其他的吗?我只是在想,与/\类似,那些其他不允许使用的字符可能具有特殊的含义,我不应该认为它们不在路径名中。其他7个角色中,有哪些绝对安全或绝对不安全?冒号/星号作为文件名分隔符?

+0

为什么会为自己造成问题?与常用的一样,像破折号“ - ”或点“。” – ghostdog74 2009-11-03 09:10:52

+0

坏消息是:在许多UNIX系统中,文件名中不允许的唯一字符是“/”。所有其他人都是有效的(尽管他们可能需要转义才能将其从shell中隐藏起来)。 – 2009-11-03 09:37:18

+0

你可以在UNIX路径中使用'/'(但是如果你这样做,你就是撒旦)。几乎你唯一不能使用的是null。 – ratbum 2013-11-27 15:13:19

回答

11

字符:"也用于路径。冒号是驱动单元分隔符,当空格是文件夹或文件名的一部分时使用引号。

在搜索文件时,将使用字符*?作为通配符。

字符<>用于将应用程序的输入输出重定向到文件或从文件中重定向。

字符|用于将一个应用程序的输出管道输入另一个应用程序的输入。

我会选择分隔文件名的管道字符。它不用于路径,它的形状与它有着天然的分离质量。

另一种方法是在字符串中使用XML。有一些开销和一些字符需要编码,但优点是它可以处理任何字符,并且格式是自我解释和定义良好的。

+0

在路径中不允许使用'''':它被认为是一个分隔符,它在包含特殊字符时围绕着一个路径,但它不是该路径的一部分。 – 2009-11-04 05:36:38

+1

@Adrien:当然是,它可以用在整个路径或路径中的某个元素,如C:\ Program Files \ Adob​​e。 – Guffa 2009-11-04 06:19:49

+0

@guffa:我坚持,是不是。double-qoutes是用来作为转义特殊字符的手段,空格是精确的。它们被Windows外壳程序和命令提示符特别解释,但根本不是文件名的一部分。你可以使用命令提示符或Windows API创建一个名称包含双引号的文件吗? – 2009-11-04 13:53:23

0

它实际上可能以创建文件以编程方式与除\以外的每个可能的字符。 (至少,这是真实的,因为Windows已经改变了它的政策。)当然,包含某些字符的文件比其他文件更难处理。

你用什么来确定Windows允许哪些字符?

更新:Windows允许的字符集也由底层文件系统和其他因素决定。有一个blog entry on MSDN更详细地解释了这一点。

+0

如果您尝试在Windows资源管理器中重命名文件,则会出现该列表,并阻止您执行此操作。我只是假设它在基本层面上就是这样 - 但你说的不是这样吗? – Smashery 2009-11-03 07:23:46

+0

资源管理器下面有很多图层。 :)我已经更新了我的答案和更多信息。 – 2009-11-03 07:35:40

+0

不会:将文件分成不同的分支...名称:文本,名称:数据等?你如何在Windows上得到一个文件名的斜线?我有一种幻觉,认为它在系统调用级别将斜杠和反斜杠对等。 – 2009-11-03 09:13:02

0

为什么不使用ALT键组合(如Alt + 0135)作为分隔符的任何字符?

+0

那是什么字符代码? – 2009-11-03 07:45:44

+2

这是文件名中的合法字符,因此无法用作分隔符。 – MSalters 2009-11-03 08:52:20

1

我以前用过*。可移植到Linux/Unix的原因。诚然,技术上它也可以用于这些文件系统。实际上,所有常见的操作系统都将其用作通配符,因此在文件名中很少见。此外,如果在将*置于文件名中时程序中断,人们并不感到惊讶。

8

Windows使用分号作为文件名分隔符:;。看看PATH环境变量,它在路径元素之间填充了;

(同样,在Python中,os.path.pathsep返回";",而它扩展为":"在Unix)

+0

奇怪的是,我可以在其中创建带分号的文件。 – Smashery 2009-11-03 23:04:16

+0

这很奇怪,但就是这样......当你添加一个包含';'的路径到%PATH%时,添加的路径被'''包围(这是路径中不允许的)。用'''围绕文件名并用''分隔它们是你的解决方案。 – 2009-11-04 05:40:25

+0

如果你用'''环绕文件名,那么你几乎可以使用任何其他字符作为分隔符,例如逗号。然后你可以使用一个通用的CSV读取例程来将字符串解析成一个数组。 – 2013-03-13 13:44:31

0

如果你需要的是一个冒号的外观,并且将编程创建它,为什么不使用只是看起来像一个冒号的UTF-8字符?

我的第一选择是修饰语信函(U + A789),因为它是一个典型的RTL字符,看起来很像冒号。这是我需要在文件名中使用完整的DateTime时使用的,例如file_2017-05-04_16꞉45꞉22_clientNo.jpg

我会远离希伯来语标点符号Sof Pasuq(U + 05C3)这样的字符,因为它是LTR字符,可能会与系统如何对齐文件名称本身。