ere*_*eOn 19 c++ filesystems validation qt
有没有办法Qt 4.6检查给定的QString是当前操作系统上的有效文件名(或目录名)?我想检查名称是否有效,而不是文件存在.
例子:
// Some valid names
test
under_score
.dotted-name
// Some specific names
colon:name // valid under UNIX OSes, but not on Windows
what? // valid under UNIX OSes, but still not on Windows
Run Code Online (Sandbox Code Playgroud)
我怎么做到这一点?有一些Qt内置功能吗?
我想避免创建一个空文件,但如果没有其他可靠的方法,我仍然希望看到如何以"干净"的方式做到这一点.
非常感谢.
小智 22
这是我从Silje Johansen - 支持工程师 - Trolltech ASA(2008年3月)获得的答案
然而.包含区域设置和查找在Linux/Unix上查询文件系统的统一方法的复杂性几乎是不可能的.
但是,据我所知,我所知道的所有应用程序都忽略了这个问题.
(阅读:他们不会实施它)
Boost也没有解决问题,它们只给出了一些模糊的概念,即路径的最大长度,特别是如果你想要跨平台.据我所知,许多人尝试过并且未能解决这个问题(至少在理论上,实际上在大多数情况下编写一个创建有效文件名的程序是绝对可能的.
如果你想自己实现它,可能值得考虑一些不那么明显的事情,例如:
无效字符的并发症
文件系统限制与操作系统和软件限制之间的区别.Windows资源管理器,我认为是Windows操作系统的一部分,并不完全支持NTFS.包含':'和'?'等的文件可以很好地驻留在ntfs分区上,但资源管理器只会对它们进行扼流.除此之外,您可以安全地玩并使用Boost Filesystem的建议.
路径长度的并发症
boost页面未完全解决的第二个问题是完整路径的长度.可能目前唯一可以确定的是没有OS /文件系统组合支持不确定的路径长度.但是,诸如"Windows最大路径限制为260个字符"之类的语句是错误的.Windows中的unicode API允许您创建长达32,767 utf-16个字符的路径.我没有检查过,但是我想象资源管理器窒息同样专注,这会使这个功能对于拥有除你自己以外的任何用户的软件完全没用(另一方面你可能不希望你的软件合唱).
存在一个名为PATH_MAX的旧变量,听起来很有希望,但问题是PATH_MAX根本就没有.
最后要提出建设性意见,以下是关于编写解决方案的可能方法的一些想法.
希望这给了一些见解.
我不认为Qt有内置函数,但是如果Boost是一个选项,你可以使用Boost.Filesystem的name_check函数。
如果 Boost 不是一个选项,它的 name_check 函数页面仍然很好地概述了在各种平台上检查的内容。