gpt4 book ai didi

delphi - 如何清理用作文件名的字符串?

转载 作者:行者123 更新时间:2023-12-03 14:33:45 26 4
gpt4 key购买 nike

我有一个例程,可以将文件转换为不同的格式并保存。原始数据文件已编号,但我的例程根据原始数据中找到的内部名称为输出提供文件名。

我尝试在整个目录上批量运行它,它工作得很好,直到我遇到一个内部名称中带有斜杠的文件。哎呀!如果它在这里这样做,它就可以轻松地在其他文件上这样做。是否有 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 来验证每个部分。对于无效字符或保留文件名(如“COM”),MoveFile 将失败,对于有效文件名,则返回成功或 ERROR_ALREADY_EXISTS。

<小时/>

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

关于delphi - 如何清理用作文件名的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/960772/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com