Delphi ANSI和UTF8文件名

Delphi ANSI和UTF8文件名,delphi,delphi-7,Delphi,Delphi 7,我正在创建一个程序来组织我的文件(Windows10上的Delphi7) 这是我获取文件的例行程序: procedure GetAllFiles(mask: string); {type TFileName = type UTF8String; } var search: TSearchRec; directory: string; fn : string; begin directory := ExtractFilePath(mask); // find all fil

我正在创建一个程序来组织我的文件(Windows10上的Delphi7)

这是我获取文件的例行程序:

procedure GetAllFiles(mask: string);
{type
  TFileName = type UTF8String; }
var
  search: TSearchRec;
  directory: string;
  fn : string;
begin
  directory := ExtractFilePath(mask);
  // find all files
  if FindFirst(mask, $23, search) = 0 then
  begin
    repeat

      // add the files to the listbox
      Form1.StringGrid1.Cells[0,Count] := IntToStr(Count);
      fn := (search.Name);
      Form1.StringGrid1.Cells[1,Count] := directory + search.Name;
      //Form1.ListBox1.Items.Add(directory + search.Name);
      Inc(Count);
    until FindNext(search) <> 0;
  end;
  // Subdirectories/ Unterverzeichnisse
  if FindFirst(directory + '*.*', faDirectory, search) = 0 then
  begin
    repeat
      if ((search.Attr and faDirectory) = faDirectory) and (search.Name[1] <> '.') then
        GetAllFiles(directory + search.Name + '\' + ExtractFileName(mask));
    until FindNext(search) <> 0;
    FindClose(search);
  end;
end;
过程GetAllFiles(掩码:字符串);
{类型
TFileName=类型UTF8String;}
变量
搜索:TSearchRec;
目录:字符串;
fn:字符串;
开始
目录:=提取文件路径(掩码);
//查找所有文件
如果FindFirst(掩码$23,搜索)=0,则
开始
重复
//将文件添加到列表框
Form1.StringGrid1.Cells[0,Count]:=IntToStr(Count);
fn:=(search.Name);
Form1.StringGrid1.Cells[1,Count]:=目录+搜索.Name;
//Form1.ListBox1.Items.Add(目录+搜索.Name);
公司(计数);
直到FindNext(搜索)0;
结束;
//子目录/Unterverzeichnisse
如果FindFirst(目录+'*.*',faDirectory,search)=0,则
开始
重复
如果((search.Attr和faDirectory)=faDirectory)和(search.Name[1]'.'),则
GetAllFiles(directory+search.Name+'\'+ExtractFileName(mask));
直到FindNext(搜索)0;
FindClose(搜索);
结束;
结束;
我的例程正在运行,但有时文件名有问题。例如:

windows资源管理器的文件名: 37远★东方运动-就像G6.mp3一样

德尔福正在展示: 37远东运动-就像G6.mp3一样


我相信问题是:Delphi正在使用ANSI,但名称是UFT8。我想把文件名粘贴到记事本++。

文件名是Unicode。Delphi7不支持现成的Unicode。您的最佳选择是安装Tnt Unicode控件:并使用Unicode版本的
FindFirst
/
FindNext
等。。。并对UI使用Unicode控件(
TStringGrid
不支持Unicode)。好的解决方案!:-)我很确定我将不得不重做我的程序并使用WideString,对吗?我认为如果可能的话升级会更好。Unicode支持是在Delphi 2009中引入的。我想升级,但我不知道如何减少EXE文件和一些组件,我听说有一些不兼容。。。我的意思是我需要更多的时间搬到新的平台上。顺致敬意,