Как да тествам дали FILE съществува и е четим в D

Как определяте дали даден файл е четим в D? Търсих както в Google, така и в документите на D и други неща многократно--търсих и SO много пъти--но не можах да намеря нищо относно тестването дали даден файл е четим . Знам как да го направя, теоретично, в C, използвайки __freadable - дори се опитах да направя външно повикване до __freadable в D, но получих следната грешка при свързване:

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

Прочетох още малко за извикването на C неща в D и очевидно ще трябва да пренапиша C заглавката stdio_ext.h--където живее __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);

person Alexej Magura    schedule 08.07.2013    source източник
comment
Освен това разбрах как да използвам __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' за повече подробности.   -  person Alexej Magura    schedule 13.07.2013


Отговори (1)


Защо да търсите в Google, когато имате отличната справка за Phobos на http://www.dlang.org?

Това, което търсите, е функцията std.file.getAttributes().

person DejanLekic    schedule 08.07.2013
comment
о, забравих да спомена това малко - получавам грешка, когато се опитам да използвам getAttributes, но може би защото се опитвам да го използвам на манипулатор на файл, вместо да го изпълнявам като "std.file.getAttributes(FILE)" . Нека го добавя много бързо като. - person Alexej Magura; 08.07.2013
comment
Да, това беше случай на неправилна употреба от моя страна, благодаря за помощта. :) - person Alexej Magura; 08.07.2013
comment
Радвам се, че помогнах. :) Да цитирам Андрей - Phobos rox! - person DejanLekic; 08.07.2013