如何测试FILE是不是存在并且在D中是不是可读
Posted
技术标签:
【中文标题】如何测试FILE是不是存在并且在D中是不是可读【英文标题】:How to test whether FILE exists and is readable in D如何测试FILE是否存在并且在D中是否可读 【发布时间】:2013-07-08 12:09:25 【问题描述】:如何确定文件在 D 中是否可读?我已经多次搜索了 google 和 D 的文档和资料——我也多次搜索过 SO——但在测试给定文件是否可读时我无法找到 anything .从理论上讲,我知道如何在 C 中使用 __freadable 来做到这一点——我什至尝试在 D 中对 __freadable 进行外部调用,但出现以下链接错误:
ldc2 -O2 -dw -g -wi -I/usr/include/stdio_ext.h -c ket.d ket.o
ldc2 -O2 -dw -g -wi -I/usr/include/stdio_ext.h -ofket ket.o
ket.o: In function `_Dmain':
/home/hav3lock/sy.l/repos/pub_rel/ket/ket.d:47: undefined reference to `_D3ket4mainFAAyaZv11__freadableUPOS4core4stdc5stdio6_iobufZi'
collect2: error: ld returned 1 exit status
Error: /usr/bin/gcc failed with status: 1
make: *** [ket] Error 1
我阅读了更多关于在 D 中调用 C 的内容,显然我需要重写 stdio_ext.h C 头文件——其中 __freadable 存在——作为 D 头文件或类似的东西,而且工作量超出了我正在尝试做的事情的范围。
我只想确定给定文件是否可读,以便我可以一次性确定该文件是否存在以及它是否也可读。如果我在 bash 中写这个傻瓜,我会使用
[[ -r FILE ]]
测试 FILE 是否存在并授予读取权限,但我只是不知道如何在 D 中执行等效操作...有什么想法吗?
尝试使用 getAttributes,但 D 抱怨:
no property 'getAttributes' for type 'File'
这是我如何使用 getAttributes
auto file_a = File(proc_auto[hdex], "r");
writeln(file_a.getAttributes);
【问题讨论】:
我还想出了如何使用 __freadableextern (C) int __freadable(FILE *__fp); int Dfreadable(string string0) auto file_a = File( string0, "r"); return __freadable(file_a.getFP);
然后你只需将要检查的文件的名称传递给'Dfreadable()',它会告诉你给定的文件是否是是否可重用。有关详细信息,请参阅“man 3 __freadable”。
【参考方案1】:
当您在 http://www.dlang.org 上有出色的 Phobos 参考资料时,为什么还要使用谷歌搜索?
你要找的是std.file.getAttributes()函数。
【讨论】:
哦,忘了提那个位——当我尝试使用 getAttributes 时出现错误,但可能是因为我试图在文件句柄上使用它而不是作为 'std 运行它.file.getAttributes(文件)'。让我快速添加它。 是的,这是我使用不正确的情况,感谢您的帮助。 :) 很高兴我能帮上忙。 :) 引用安德烈的话——“火卫一!”以上是关于如何测试FILE是不是存在并且在D中是不是可读的主要内容,如果未能解决你的问题,请参考以下文章