【发布时间】:2011-04-21 15:51:46
【问题描述】:
我想知道是否有一种通用的方法来生成可移植的文件系统安全文件名。也就是说,我有一个用户输入了字符串,并希望生成一个名称与他们选择的名称非常相似的文件。结果名称不得包含任何路径引用或其他特殊的文件系统特殊名称或标记。
目前我只是用其他字符或空字符串替换一堆已知的坏字符。例如,给定名称ABC / DEF* : A Company?,我将生成字符串ABC - DEF - A Company。我对替换字符的选择完全是任意的,因为我不知道通用转义符号。
所以我的相关问题是:
- 是否有一种方法(可能在 boost 文件系统中)可以告诉我名称是否严格指代没有路径的文件?
- 是否有一个函数可以告诉我名称是否“安全”可用作文件(这可能是对某些文件系统的 1 的额外检查)?
- 是否有函数可以将字符串转换为合理的安全名称?
补充说明
对于#1,我想将 boost path::filename() 与原始对象进行比较,如果它们相同,则我有一个文件。然而,这仍然允许像'..'和'.'这样的东西。但如果#2 有一个好的解决方案,那可能没问题
理论上我必须提供文件所在的目录,因为不同的文件系统可能有不同的要求。但是操作系统的全局解决方案也可以。
我已经有一个函数,它只是替换了一堆众所周知的不安全字符。
不能使用通用文件对话框来进行过滤,因为界面可能并不总是允许它们,并且在某些情况下用户不能直接意识到与文件的关系(但是高级用户会)。
【问题讨论】:
标签: c++ windows linux boost filesystems