删除haskell中的文件

时间:2013-11-18 15:13:07

标签: windows haskell

我试图在removehile函数的帮助下在winhugs中删除haskell中的文本文件。但是它给出了一个错误

Program error: price.txt: Directory.removeFile: permission denied

可能是什么原因?

1 个答案:

答案 0 :(得分:4)

根据removeFile的Hackage Docs,操作可能会失败:

  

isPermissionError / PermissionDenied进程没有足够的权限来执行操作。 [EROFS,EACCES,EPERM]

此外,根据source coderemoveFile只是Win32 API中deleteFile的一个瘦包装:

removeFile :: FilePath -> IO ()
removeFile path =
#if mingw32_HOST_OS
  Win32.deleteFile path
#else
  Posix.removeLink path
#endif

更新

在挖掘winhugs的源代码之后,似乎Windows API函数unlink实际上用于删除Hugs中的文件:

primFun(primRemoveFile) { /* remove a file     */
  int rc;
  String s = evalName(IOArg(1));

  if (!s) {
    IOFail(mkIOError(NULL,
             nameIllegal,
             "Directory.removeFile",
             "illegal file name",
             &IOArg(1)));
  }

   rc = unlink(s);

  if (rc != 0)
    throwErrno("Directory.removeFile", TRUE, NO_HANDLE, &IOArg(1));
  IOReturn(nameUnit);
}

在任何情况下,Haskell都没有引入任何权限约束的意义上的前一个答案。相反,任何权限错误都可能是由于底层操作系统环境(用户帐户,打开文件,权限等)。