我正在寻找一个字符来使用文件名分隔符(我在一个明文字符串中存储多个文件名)。的Windows似乎没有允许:
,?
,*
,<
,>
,"
,|
,在文件名中/
和\
。显然,\
和/
不能使用,因为它们是指路径内的某些东西。有什么理由不使用这些其他的吗?我只是在想,与/
或\
类似,那些其他不允许使用的字符可能具有特殊的含义,我不应该认为它们不在路径名中。其他7个角色中,有哪些绝对安全或绝对不安全?冒号/星号作为文件名分隔符?
回答
字符:
和"
也用于路径。冒号是驱动单元分隔符,当空格是文件夹或文件名的一部分时使用引号。
在搜索文件时,将使用字符*
和?
作为通配符。
字符<
和>
用于将应用程序的输入输出重定向到文件或从文件中重定向。
字符|
用于将一个应用程序的输出管道输入另一个应用程序的输入。
我会选择分隔文件名的管道字符。它不用于路径,它的形状与它有着天然的分离质量。
另一种方法是在字符串中使用XML。有一些开销和一些字符需要编码,但优点是它可以处理任何字符,并且格式是自我解释和定义良好的。
在路径中不允许使用'''':它被认为是一个分隔符,它在包含特殊字符时围绕着一个路径,但它不是该路径的一部分。 – 2009-11-04 05:36:38
@Adrien:当然是,它可以用在整个路径或路径中的某个元素,如C:\ Program Files \ Adobe。 – Guffa 2009-11-04 06:19:49
@guffa:我坚持,是不是。double-qoutes是用来作为转义特殊字符的手段,空格是精确的。它们被Windows外壳程序和命令提示符特别解释,但根本不是文件名的一部分。你可以使用命令提示符或Windows API创建一个名称包含双引号的文件吗? – 2009-11-04 13:53:23
它实际上可能以创建文件以编程方式与除\
以外的每个可能的字符。 (至少,这是真实的,因为Windows已经改变了它的政策。)当然,包含某些字符的文件比其他文件更难处理。
你用什么来确定Windows允许哪些字符?
更新:Windows允许的字符集也由底层文件系统和其他因素决定。有一个blog entry on MSDN更详细地解释了这一点。
如果您尝试在Windows资源管理器中重命名文件,则会出现该列表,并阻止您执行此操作。我只是假设它在基本层面上就是这样 - 但你说的不是这样吗? – Smashery 2009-11-03 07:23:46
资源管理器下面有很多图层。 :)我已经更新了我的答案和更多信息。 – 2009-11-03 07:35:40
不会:将文件分成不同的分支...名称:文本,名称:数据等?你如何在Windows上得到一个文件名的斜线?我有一种幻觉,认为它在系统调用级别将斜杠和反斜杠对等。 – 2009-11-03 09:13:02
为什么不使用ALT键组合(如Alt + 0135)作为分隔符的任何字符?
那是什么字符代码? – 2009-11-03 07:45:44
这是文件名中的合法字符,因此无法用作分隔符。 – MSalters 2009-11-03 08:52:20
我以前用过*
。可移植到Linux/Unix的原因。诚然,技术上它也可以用于这些文件系统。实际上,所有常见的操作系统都将其用作通配符,因此在文件名中很少见。此外,如果在将*
置于文件名中时程序中断,人们并不感到惊讶。
Windows使用分号作为文件名分隔符:;
。看看PATH环境变量,它在路径元素之间填充了;
。
(同样,在Python中,os.path.pathsep
返回";"
,而它扩展为":"
在Unix)
奇怪的是,我可以在其中创建带分号的文件。 – Smashery 2009-11-03 23:04:16
这很奇怪,但就是这样......当你添加一个包含';'的路径到%PATH%时,添加的路径被'''包围(这是路径中不允许的)。用'''围绕文件名并用''分隔它们是你的解决方案。 – 2009-11-04 05:40:25
如果你用'''环绕文件名,那么你几乎可以使用任何其他字符作为分隔符,例如逗号。然后你可以使用一个通用的CSV读取例程来将字符串解析成一个数组。 – 2013-03-13 13:44:31
如果你需要的是一个冒号的外观,并且将编程创建它,为什么不使用只是看起来像一个冒号的UTF-8字符?
我的第一选择是修饰语信函(U + A789),因为它是一个典型的RTL字符,看起来很像冒号。这是我需要在文件名中使用完整的DateTime时使用的,例如file_2017-05-04_16꞉45꞉22_clientNo.jpg
我会远离希伯来语标点符号Sof Pasuq(U + 05C3)这样的字符,因为它是LTR字符,可能会与系统如何对齐文件名称本身。
- 1. 如何使用冒号分隔符
- 2. 冒号作为Rails路线的分隔符?
- 3. 在javascript中使用冒号作为分隔符
- 4. 从冒号和分号分隔的字符串中提取R
- 5. 使用星号字符作为Java扫描器分隔符
- 6. 解析半角冒号分隔符文件
- 7. 多民主党PHP字符串数组 - 逗号分隔,冒号分隔阵列
- 8. 由不以星号为首的冒号拆分
- 9. re.split使用“冒号”作为分隔符进行拆分,如果它包含在\“
- 10. 将16字节的IPv6为冒号分隔字符串
- 11. 如何从冒号(:)读取C#中的分隔文本文件
- 12. 片“冒号操作”命名
- 13. 为什么IPv6使用冒号作为分隔符而不是点?
- 14. 使用scanf分隔冒号的问题
- 15. 打印数组key =值冒号分隔
- 16. 用冒号分隔小数点
- 17. Zend_Feed entires和冒号分隔键
- 18. 在postgres中显示冒号分隔值
- 19. 用冒号分隔单输入线
- 20. 将信息插入以冒号分隔的文件
- 21. VIM解释与冒号(S)作为文件名参数:行:列
- 22. Windows冒号中的分号?
- 23. 获取的名称作为逗号分隔值字符串
- 24. 逗号分隔符号字符串
- 25. 在Makefile中转义文件名冒号
- 26. Python中文件名中的冒号
- 27. 用逗号分隔多个逗号分隔的csv文件
- 28. 以感叹号作为分隔符打开文本文件和分割()
- 29. 逗号与撇号分隔名称
- 30. URL中的分号作为查询字符串的分隔符
为什么会为自己造成问题?与常用的一样,像破折号“ - ”或点“。” – ghostdog74 2009-11-03 09:10:52
坏消息是:在许多UNIX系统中,文件名中不允许的唯一字符是“/”。所有其他人都是有效的(尽管他们可能需要转义才能将其从shell中隐藏起来)。 – 2009-11-03 09:37:18
你可以在UNIX路径中使用'/'(但是如果你这样做,你就是撒旦)。几乎你唯一不能使用的是null。 – ratbum 2013-11-27 15:13:19