【问题标题】:Delphi doubles single quotes while searching with FindFirst/FindeNextDelphi 在使用 FindFirst/FindeNext 搜索时将单引号加倍
【发布时间】:2012-06-14 18:52:44
【问题描述】:

我在 Windows 7 上使用 Delphi 2010,并且在递归搜索目录时遇到单引号加倍的问题。

这是我搜索目录的代码。

  if FindFirst(aPath + '*', faDirectory, sr) = 0 then
    try
      repeat
        if  (sr.Name <> '.') and (sr.Name <> '..') then
          if (sr.Attr and faDirectory) = faDirectory then
            SearchFolderEx(aPath + sr.Name + '\', aSearchMasks);

      until FindNext(sr) <> 0;
    finally
      FindClose(sr);
    end;

现在有了这样的路径(从“C:\New folder\”开始)

C:\New folder\New Folder's\New Text Document.txt

FindFirst/FindeNext 将单引号加倍

'New Folder''s'

TSearchRec 中的 FindData.cFileName 看起来像这样

('N', 'e', 'w', ' ', 'F', 'o', 'l', 'd', 'e', 'r', '''', 's', #0, #0, ...)

问题可能出在哪里,我该如何解决?

【问题讨论】:

  • 唯一需要解决的问题是您的folder's 名称(双关语)。

标签: delphi path find


【解决方案1】:

这里没有问题,也不需要解决任何问题。 ' 是字符串分隔符,只是为了表示为'' 而转义。当调试器在字符串中显示'' 时,这只是它表示单引号字符的方式。

这里的文档涵盖了这个主题:Character Strings

所以,

''''

是一个长度为 1 的字符串,其单个元素是引号。

同样

'New Folder''s'

是定义字符串的Delphi字符串文字

New Folder's

调试器使用与字符串文字相同的规则向您显示变量的内容。

【讨论】:

  • +1。 IOW,这只是调试器中检查变量时的显示问题,对实际代码的行为或结果没有影响。
  • 有趣的是,该行为取决于版本。 D2007 调试器将单个' 字符显示为''',而在XE 上它是''''(显然也是D2010)(ansi-wide 无关紧要)。
猜你喜欢
  • 2016-09-26
  • 1970-01-01
  • 2015-07-07
  • 2013-08-02
  • 1970-01-01
  • 2017-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多