Как определяте дали даден файл е четим в 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);
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