2013-05-30 143 views
0

我有一个参数为什么这个比较失败

å文件下面的函数=完整的文件名

aFolder =一个文件夹名,以移动复制/到

aGuid =的GUID,它的文件分配

aAction =做什么用的FIL(移动或复制)

我猜想行如果TRIM(NEWFILE)= TRIM(å文件),然后退出寿如果旧文件与新文件相同,则会阻止代码执行任何操作。但事实并非如此。即使文件相同,也执行FileExists(NewFile)行。

在我的调试日志,我有

30-05-2013 08:10:3​​4:840#新的文件:C:_Delphi_Compiled \ HomeSuite \调试\ indbo \ computerfladskaerm \ 968ED02C,21B5-4582-8A49- 8463E01ADCB3.pdf

30-05-2013 08:10:3​​4:841#旧文件:C:_Delphi_Compiled \ HomeSuite \调试\ Indbo \ computerfladskaerm \ 968ED02C-21B5-4582-8A49-8463E01ADCB3.pdf

并且据我所知这些名字是一样的

function DocumentHandle(aFile, aFolder, aGuid: string; aAction: TDocumentAction): string; 
const 
    CopyMsg = 'Der findes allerede en fil med det navn!' + sLineBreak + 
      'Filen omdøbes derfor til et unikt navn'; 
var 
    NewFile: string; 
begin 
    Result := aFile; 
    try 
    NewFile := ExtractFileName(aFile); 
    NewFile := aFolder + NewFile; 
    if Trim(NewFile) = Trim(aFile) then 
     Exit; 
    if FileExists(NewFile) then 
     begin 
     NewFile := ExtractFileExt(aFile); 
     NewFile := aFolder + CleanGuid(aGuid) + NewFile; 
     MessageDlg(CopyMsg, mtWarning, [mbOk], 0); 
     end; 
    case aAction of 
     daCopy: 
     begin 
      if CopyFile(PwideChar(aFile), PwideChar(NewFile), False) then 
      Result := NewFile; 
     end; 
     daMove: 
     begin 
      if MoveFile(PwideChar(aFile), PwideChar(NewFile)) then 
      Result := NewFile; 
     end; 
    end; 
    except 
    on E: exception do 
     Logfile.Error('U_Documents.DocumentHandle: ' + E.Message); 
    end; 
end; 

回答

5

比较CaseSensitive,您的文件名中包含indboIndbo。 您可以比较

UpperCase(f1)=UpperCase(f2) 

if SameText(f1,f2) then ... 
+1

你也可以使用'AnsiSameText(修剪(aFile),修剪(NewFile))' –

+0

如果你能听到或者看看我现在你会看到一个非常尴尬的男人:-) – OZ8HP

+0

+1斑点 –

0

它看起来像你的有意义的部分后,保持在你的宽字符串垃圾数据,你可以尝试在这两个字符串长度(aMessage),看看长度同..

2

而不是比较字符串,这可能会导致误报,你可以替换的文件路径转换为使用SHParseDisplayName()IShellFolder.ParseDisplayName() PIDL或者,然后比较使用IShellFolder.CompareIDs()那些。这可以让你不仅可以比较混合情况下的文件,还可以比较短文件名和长文件名等。