我试图在removehile函数的帮助下在winhugs中删除haskell中的文本文件。但是它给出了一个错误
Program error: price.txt: Directory.removeFile: permission denied
可能是什么原因?
答案 0 :(得分:4)
根据removeFile
的Hackage Docs,操作可能会失败:
isPermissionError / PermissionDenied进程没有足够的权限来执行操作。 [EROFS,EACCES,EPERM]
此外,根据source code,removeFile
只是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都没有引入任何权限约束的意义上的前一个答案。相反,任何权限错误都可能是由于底层操作系统环境(用户帐户,打开文件,权限等)。