创建带有特殊符号的文件夹及其路径名

3
我有一个小问题,我需要用我的C代码或C++创建目录,但目录名称必须包含像':'、' '、'.'这样的字符,一般是当前时间。当我尝试使用mkdir()函数创建时,我会得到EINVAL错误,但是从system("mkdir ...")中一切都很好。我该如何解决这个问题呢?
谢谢!

1
你能给出一个在shell mkdir中有效而在mkdir()中无效的名称示例吗?此外,man页面甚至没有将EINVAL列为可能的错误代码之一,这使得你看到它很奇怪。 - FatalError
你能贴一下代码片段吗?听起来可能是文件名没有正确转义特殊字符的问题。 - rfinz
mkdir() 成功时返回零,出错时返回-1并设置 errno。EINVAL 不是 mkdir() 的文档化 errno 值。如果您为每个字段使用固定数量的数字,那么分隔符字符在任何情况下都有些多余,不是吗? - Clifford
@Clifford 尽管 POSIX 和 Linux 文档都没有提到 mkdirEINVAL,但是如果您尝试创建一个文件或目录的名称不受文件系统支持,Linux 确实会返回 EINVAL。这是有道理的;我认为这是文档错误。 - Gilles 'SO- stop being evil'
@evghin 发布一个示例(复制并粘贴代码片段)。很有可能你引用的 shell 命令存在错误,实际上并没有创建包含你想要的特殊字符的目录。 - Gilles 'SO- stop being evil'
当我写下EINVAL时,可能是我错了。从perror("mkdir")中,我得到了“无效参数”的错误信息。问题在于我正在使用FAT文件系统,但当我使用system("mkdir...")在我的虚拟文件系统中尝试时,它可以工作。感谢所有人,特别是Rob。 - evghin
1个回答

4
不同的文件系统格式对于哪些字符是有效或无效的有不同的规则。对于ext2及其后代,文件名可以包含任何字符,除了'/''\0'
对于FAT文件系统及其后代,无效字符列表更长,包括':'
请检查您正在使用的文件系统格式,并尝试在不同的文件系统上运行程序。

你如何解释这样一个事实:system("mkdir ...")可以工作,但在同一文件系统上mkdir()却不行? - Shahbaz
@Shahbaz - 我不解释。我认为他的测试有缺陷。 - Robᵩ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接