Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 19.07.2015, 13:57   #1
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию проверка наличия папки

Здравствуйте господа ГУРУ С++

Нужно проверить наличие директории в С++
Дельфийские функции DirectoryExists не предлагать, ибо функция должна быть универсальной.

Как выполнить проверку?
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума
Старый 19.07.2015, 14:09   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

В каком смысле универсальной?
Насколько я понимаю DirectoryExists использует FindFirst. Для винды это и так универсально.
I'm learning to live...
Stilet вне форума
Старый 19.07.2015, 14:20   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Не знаю как в Билдере с поддержкой стандарта, но если хотите универсальности, то стоит ориентироваться на http://en.cppreference.com/w/cpp/experimental/fs/exists
p51x вне форума
Старый 19.07.2015, 16:12   #4
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Цитата:
В каком смысле универсальной?
Виталий, в том смысле, чтобы используемая функция была и в Visual C++ и в Borland C++ и просто в Си , а если не оконная и не файловая - желательно в Линуксоподобном Си.
Например atoi вместо StrToInt , char* вместо AnsiString , fopen fclose вместо FileExists и так далее


Цитата:
Насколько я понимаю DirectoryExists использует FindFirst
нет не использует.
С ситуации вышел методом перевода функции DirectoryExists из Делфи (на которую "смотрит" билдер)

Код:
function DirectoryExists(const Directory: string): Boolean;
{$IFDEF LINUX}
var
  st: TStatBuf;
begin
  if stat(PChar(Directory), st) = 0 then
    Result := S_ISDIR(st.st_mode)
  else
    Result := False;
end;
{$ENDIF}
{$IFDEF MSWINDOWS}
var
  Code: Integer;
begin
  Code := GetFileAttributes(PChar(Directory));
  Result := (Code <> -1) and (FILE_ATTRIBUTE_DIRECTORY and Code <> 0);
end;
{$ENDIF}

Код:
  int _code = GetFileAttributes(Directory);
  bool _exists = (_code != -1) && (_code & FILE_ATTRIBUTE_DIRECTORY != 0);
справка
GetFileAttributes - "смотрит" в ядро Винды
Код:
function GetFileAttributes; external kernel32 name 'GetFileAttributesA';
Уважаемый профессионал, подскажите мне чайнику с++ как использовать множество функционала с префиксом std::
Как ни тема о билдере, Вы всё предлагаете использовать такой функционал, а я уже третью неделю пытаюсь всосать как это применить к Builder C++ но пока не получается.

Просветите пожалуйста.
95% сбоев и ошибок приложений, находится в полу метрах от монитора

Последний раз редактировалось Stilet; 19.07.2015 в 16:42.
JUDAS вне форума
Старый 19.07.2015, 16:46   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
в том смысле, чтобы используемая функция была и в Visual C++ и в Borland C++ и просто в Си
Хм... Если речь идет о винде то я бы FindFirst как раз использовал. Но это субъективно.
Цитата:
С ситуации вышел методом перевода функции DirectoryExists из Делфи (на которую "смотрит" билдер)
Ну учиться у генофонда дело благое, и почти всегда выигрышное. Так что правильно сделал.
I'm learning to live...
Stilet вне форума
Старый 19.07.2015, 16:50   #6
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Цитата:
Хм... Если речь идет о винде то я бы FindFirst как раз использовал. Но это субъективно.
А FindFirst работает корректно, если я проверю папку "c:\node\item1", в то время когда в природе не существует папки "c:\node\" ??
у меня вылетела с "красными гирляндами"
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума
Старый 19.07.2015, 17:35   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Не знаю как в Делфи, в Лазаре ничего не вылетает.
А если использовать WinAPI то и подавно.
I'm learning to live...
Stilet вне форума
Старый 19.07.2015, 17:57   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Цитата:
Сообщение от JUDAS Посмотреть сообщение
Уважаемый профессионал, подскажите мне чайнику с++ как использовать множество функционала с префиксом std::
Как ни тема о билдере, Вы всё предлагаете использовать такой функционал, а я уже третью неделю пытаюсь всосать как это применить к Builder C++ но пока не получается.

Просветите пожалуйста.
Так же как и везде - подключаете и используете. Не верите? Читайте офф - http://edn.embarcadero.com/article/10284
p51x вне форума
Старый 19.07.2015, 18:10   #9
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Так же как и везде - подключаете и используете. Не верите? Читайте офф - http://edn.embarcadero.com/article/10284
Можете сбросить рабочий пример "Неллоу Ворлд" чтобы в 6-м Билдере компилился.
открыл stdio.h указанную функцию exists не наблюдаю в упор с преффиксом std::

Код:
#define __STDIO_H_USING_LIST
     using std::FILE;
     using std::__getStream;
     using std::_fcloseall;
     using std::_fdopen;
     using std::_fgetc;
     using std::_fgetchar;
     using std::_fgetwc;
     using std::_fgetwchar;
     using std::_fileno;
     using std::_floatconvert;
     using std::_flushall;
     using std::_fputc;
     using std::_fputchar;
     using std::_fputwc;
     using std::_fputwchar;
     using std::_fsopen;
     using std::_getw;
     using std::_getws;
     using std::_pclose;
     using std::_popen;
     using std::_putw;
     using std::_putws;
     using std::_rmtmp;
     using std::_sopen;
     using std::_streams;
     using std::_strerror;
     using std::_tempnam;
     using std::_unlink;
     using std::_wfdopen;
     using std::_wfopen;
     using std::_wfreopen;
     using std::_wfsopen;
     using std::_wperror;
     using std::_wpopen;
     using std::_wremove;
     using std::_wrename;
     using std::_wsopen;
     using std::_wtempnam;
     using std::_wtmpnam;
     using std::_wunlink;
     using std::clearerr;
     using std::fclose;
     using std::feof;
     using std::ferror;
     using std::fflush;
     using std::fgetc;
     using std::fgetpos;
     using std::fgets;
     using std::fgetwc;
     using std::fgetws;
     using std::fopen;
     using std::fpos_t;
     using std::fprintf;
     using std::fputc;
     using std::fputs;
     using std::fputwc;
     using std::fputws;
     using std::fread;
     using std::freopen;
     using std::fscanf;
     using std::fseek;
     using std::fsetpos;
     using std::ftell;
     using std::fwprintf;
     using std::fwrite;
     using std::fwscanf;
     using std::getc;
     using std::getchar;
     using std::gets;
     using std::getwc;
     using std::getwchar;
     using std::perror;
     using std::printf;
     using std::putc;
     using std::putchar;
     using std::puts;
     using std::putwc;
     using std::putwchar;
     using std::remove;
     using std::rename;
     using std::rewind;
     using std::scanf;
     using std::setbuf;
     using std::setvbuf;
     using std::snprintf;
     using std::snwprintf;
     using std::sprintf;
     using std::sscanf;
     using std::strerror;
     using std::swprintf;
     using std::swscanf;
     using std::tmpfile;
     using std::tmpnam;
     using std::ungetc;
     using std::ungetwc;
     using std::vfprintf;
     using std::vfscanf;
     using std::vfwprintf;
     using std::vfwscanf;
     using std::vprintf;
     using std::vscanf;
     using std::vsnprintf;
     using std::vsnwprintf;
     using std::vsprintf;
     using std::vsscanf;
     using std::vswprintf;
     using std::vswscanf;
     using std::vwprintf;
     using std::vwscanf;
     using std::wprintf;
     using std::wscanf;

#if !defined(__STDC__)
     using std::_snprintf;
     using std::_snwprintf;
     using std::_vsnprintf;
     using std::_vsnwprintf;
     using std::fcloseall;
     using std::fdopen;
     using std::fgetchar;
     using std::fileno;
     using std::flushall;
     using std::fputchar;
     using std::getw;
     using std::putw;
     using std::rmtmp;
     using std::sopen;
     using std::tempnam;
     using std::unlink;
#endif // !__STDC__
95% сбоев и ошибок приложений, находится в полу метрах от монитора

Последний раз редактировалось JUDAS; 19.07.2015 в 18:15.
JUDAS вне форума
Старый 19.07.2015, 18:24   #10
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

А зачем вы открывали stdio.h?
С чего она там должна быть? Если "Defined in header <experimental/filesystem>"?
Ладно бросьте эту затею... В такой древности вряд ли оно будет.
p51x вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проверка наличия папки с именем зависящим от сисстемной даты из X.bat vova_ Помощь студентам 2 21.09.2012 17:59
Проверка наличия элемента в БД WarAngel.alk PHP 5 28.09.2011 10:23
Проверка наличия и создание папки в VB 6.0 EREV@N Помощь студентам 1 24.04.2011 08:30
Проверка наличия файла nervniy Работа с сетью в Delphi 4 28.10.2010 19:47
Проверка наличия директории SANIOK_AV Общие вопросы Delphi 2 16.01.2008 11:05