delphi – 如何清理字符串以用作文件名?

前端之家收集整理的这篇文章主要介绍了delphi – 如何清理字符串以用作文件名?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个例程,可以将文件转换为不同的格式并保存。原始数据文件已编号,但我的例程根据原始文件中的内部名称输出提供文件名。

我试图在一个完整的目录上批量运行它,它工作正常,直到我点击一个内部名称中有斜杠的文件。哎呀!如果它在这里这样做,它可以很容易地在其他文件上。是否存在RTL(或WinAPI)例程,它将清理字符串并删除无效符号,以便可以安全地用作文件名?

解决方法

您可以使用 PathGetCharType function,PathCleanupSpec function或以下技巧:
function IsValidFilePath(const FileName: String): Boolean;
  var
    S: String;
    I: Integer;
  begin
    Result := False;
    S := FileName;
    repeat
      I := LastDelimiter('\/',S);
      MoveFile(nil,PChar(S));
      if (GetLastError = ERROR_ALREADY_EXISTS) or
         (
           (GetFileAttributes(PChar(Copy(S,I + 1,MaxInt))) = INVALID_FILE_ATTRIBUTES)
           and
           (GetLastError=ERROR_INVALID_NAME)
         ) then
        Exit;
      if I>0 then
        S := Copy(S,1,I-1);
    until I = 0;
    Result := True;
  end;

代码将字符串分成几部分,并使用MoveFile验证每个部分。 MoveFile将因无效字符或保留文件名(如“COM”)而失败,并返回成功或ERROR_ALREADY_EXISTS作为有效文件名。

PathCleanupSpec位于Win32API / JwaShlObj.pas下的Jedi Windows API

猜你在找的Delphi相关文章