delphi – 如何清理字符串以用作文件名?
发布时间:2020-12-15 10:13:02 所属栏目:大数据 来源:网络整理
导读:我有一个例程,可以将文件转换为不同的格式并保存。原始数据文件已编号,但我的例程根据原始文件中的内部名称为输出提供文件名。 我试图在一个完整的目录上批量运行它,它工作正常,直到我点击一个内部名称中有斜杠的文件。哎呀!如果它在这里这样做,它可以
我有一个例程,可以将文件转换为不同的格式并保存。原始数据文件已编号,但我的例程根据原始文件中的内部名称为输出提供文件名。
我试图在一个完整的目录上批量运行它,它工作正常,直到我点击一个内部名称中有斜杠的文件。哎呀!如果它在这里这样做,它可以很容易地在其他文件上。是否存在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中 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |