【问题标题】:Delphi Berlin 10.1 create file/folder OS XDelphi Berlin 10.1 创建文件/文件夹 OS X
【发布时间】:2018-02-12 15:16:12
【问题描述】:

如何通过 delphi 在 OS X 上创建文件/文件夹? 我正在尝试使用函数

System.SysUtils.FileCreate

还有

System.IOUtils.TDirectory.CreateDirectory

代码:

  if FileCreate('/var/folders/bla.txt') = INVALID_HANDLE_VALUE then
 raise Exception.Create('File already exists');

 `TDirectory.CreateDirectory('/var/folders/mydirdelete');`

无论如何,当我运行应用程序时,我得到了

Exception EFileNotFoundException in module blprtl240.dylib at 0053AFAF.
The specified file was not found. 

即使我创建文件夹。

有什么建议吗?

【问题讨论】:

    标签: macos delphi firemonkey


    【解决方案1】:

    文档说FileCreate return INVALID_HANDLE_VALUE (-1) 表示发生了错误,这不仅意味着该文件已经存在,例如可能是Permission denied ...等等。

    关于CreateDirectory,如果给定的路径无效或包含无效字符,则会引发异常。

    试试这个:

    const
      AFilename = '/tmp/folders/bla.txt';
    begin
      if NOT FileExists(AFilename) then begin
        if NOT DirectoryExists(ExtractFilePath(AFilename)) then
          if NOT ForceDirectories(ExtractFilePath(AFilename)) then RaiseLastOSError;
        if (FileCreate(AFilename) = INVALID_HANDLE_VALUE) then RaiseLastOSError;
      end;
    

    【讨论】:

    • @artemk EFileNotFoundException 仅在指定文件不存在时引发。上面的代码永远不会引发这样的异常。
    • 谢谢。我懂了。祝你好运!