如何使用Delphi检查字符串是否为有效的Windows文件夹名称?

3

可能是重复的问题:
如何为文件名准备一个字符串?

我需要从用户的文本(unicode字符串类型)创建一个文件夹。在Windows下,一些字符是不合法的文件夹名称。

你知道一个Delphi函数,它可以检查文件夹名称是否有效吗?或者最好的方法是将字符串转换为有效的文件夹名称(去除或转换无效字符)?

感谢您的帮助!

编辑:请注意非法关键字的说明。


1
重要提示:这不仅仅是禁止字符的问题,还包括非法单词:'CON', 'COM', 'LPT', 'NUL', 'PRN', 'AUX' ... 我需要手动检查吗? - TridenT
@TridenT,我不知道有哪个函数可以给你这些非法名称。你有没有文档指出它们?在检查时,请记得使用不区分大小写的SameText - David Heffernan
@TridenT 这个问题是重复的(请参见上面的评论)。Digger找到了原始问题。Alexandre在那里给出的答案应该能解决你的问题。 - David Heffernan
@TridenT - 您缺少要求。您是否计划打开文件?写入?验证其是否存在?在这组要求下,CON、COM、LPT等仍然是有效的文件名,但您不能使用它们来命名文件。同样,如果创建一个名为“C:\”的文件,那是有效的,但您不能将其用作文件名。请更具体地说明。 - Leonardo Herrera
@Leonardo 就像我所写的那样:从字符串创建文件夹 - TridenT
显示剩余2条评论
3个回答

7

第一个答案看起来是一个不错的起点。关于.com的答案就太糟糕了。 - Leonardo Herrera
@Leonardo Herrera - 我为了完整性而添加了两个 - BielsasBucket
我个人认为,第一个是值得加1分的,但第二个则是-1分 :-) - Leonardo Herrera
1
链接已失效。https://web.archive.org/web/20130415123611/http://delphi.about.com/od/delphitips2009/qt/is-valid-file-name-delphi.htm - Xel Naga

1
你可以尝试这段代码。
if CreateDir(DirectoryName) then
begin
  Showmessage('Valid directory name and directory created');
end
else
begin
  Showmessage('Failed');
end; 

3
这不是一个好的解决方案,因为创建目录可能会因其他原因失败(例如访问权限)。这里无法区分。此外,OP提到需要更正文件夹名称。 - jpfollenius
这并不是downvote的动机。OP说他想创建目录;失败是可以预料的,不是吗? - Leonardo Herrera
我没有点踩。似乎有人投了赞成票来弥补这个踩的票数。 - jpfollenius

0
你可以轻松地使用 StrUtils 单元中的 ContainsStr 和 ReplaceStr 自行完成此操作。我不知道是否有一个 API 方法可以实现这一点,也许其他人可以回答。

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