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

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

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

解决方法

您可以使用 PathGetCharType function,PathCleanupSpec function或以下技巧:
  1. function IsValidFilePath(const FileName: String): Boolean;
  2. var
  3. S: String;
  4. I: Integer;
  5. begin
  6. Result := False;
  7. S := FileName;
  8. repeat
  9. I := LastDelimiter('\/',S);
  10. MoveFile(nil,PChar(S));
  11. if (GetLastError = ERROR_ALREADY_EXISTS) or
  12. (
  13. (GetFileAttributes(PChar(Copy(S,I + 1,MaxInt))) = INVALID_FILE_ATTRIBUTES)
  14. and
  15. (GetLastError=ERROR_INVALID_NAME)
  16. ) then
  17. Exit;
  18. if I>0 then
  19. S := Copy(S,1,I-1);
  20. until I = 0;
  21. Result := True;
  22. end;

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

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

猜你在找的Delphi相关文章