如何测试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);

【问题讨论】:

我还想出了如何使用 __freadable extern (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中是不是可读的主要内容,如果未能解决你的问题,请参考以下文章

测试makefile中是不是存在目录

如何使用 XSLT 测试图像文件是不是存在?

Shell条件测试

shell-基础2

如何找出 C# / .NET 中是不是存在文件?

shell 测试文件