Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как узнать существует ли файл? 
V
    Опции темы
Hose
Дата 12.5.2006, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 11.4.2006

Репутация: нет
Всего: 1



Приветствую.
Пишу програмку под *nix. Причем компилироваться она будет не мною и неизвестно на каком *nix. Сооответственно есть необходимость использовать только те функции и библиотеки, которые есть везде. Компилятор ориентировочно gcc.
Мне необходимо проверить существует ли файл по заданному пути. Какую функцию для этого лучше использовать?
Спасибо. 
PM MAIL   Вверх
GrayCardinal
Дата 12.5.2006, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 8
Всего: 58



$ man access
или 
:Man access
smile

Цитата

#include <unistd.h>

int access(const char *pathname, int mode);

CONFORMING TO
       SVID, AT&T, POSIX, X/OPEN, 4.3BSD

if (access ("/dev/null", R_OK) == F_OK) {
// Есть файл и может быть прочитан.
}



Или тупо через open (#include <fcntl.h>).
Цитата

CONFORMING TO
       SVr4,  SVID,  POSIX,  X/OPEN,  4.3BSD.   Only the operations F_DUPFD, F_GETFD,
       F_SETFD, F_GETFL, F_SETFL, F_GETLK, F_SETLK, F_SETLKW, F_GETOWN, and  F_SETOWN
       are  specified  in  POSIX.1.   F_GETSIG,  F_SETSIG,  F_NOTIFY, F_GETLEASE, and
       F_SETLEASE are Linux specific.  (Define the _GNU_SOURCE macro before including
       <fcntl.h>  to  obtain these definitions.)  The flags legal for F_GETFL/F_SETFL
       are those supported by open(2)  and  vary  between  these  systems;  O_APPEND,
       O_NONBLOCK, O_RDONLY, and O_RDWR are specified in POSIX.1.  SVr4 supports sev-
       eral other options and flags not documented here.



  

Это сообщение отредактировал(а) GrayCardinal - 12.5.2006, 18:44


--------------------
PM MAIL WWW   Вверх
DeadSoul
Дата 12.5.2006, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1217
Регистрация: 25.9.2005
Где: Москва

Репутация: нет
Всего: 11



boost::filesystem 


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
Spalax
Дата 16.5.2006, 08:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 21.3.2005

Репутация: нет
Всего: нет



Да ну не весело 

Код

if (!(fp = fopen("filename","r"))) {
  //Значит файла нету .
}
 
PM MAIL   Вверх
Mayk
Дата 16.5.2006, 08:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 5
Всего: 134



Цитата(GrayCardinal @  12.5.2006,  22:42 Найти цитируемый пост)
$ man access

В кач-ве альтернативы можно использовать stat (а также lstat, fstat - man автору в помощь).
 


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
GrayCardinal
Дата 17.5.2006, 08:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 8
Всего: 58



Mayk, 
Вы б еще "link" предложили. Или "unlink" шоб не париться. 


--------------------
PM MAIL WWW   Вверх
GrayCardinal
Дата 17.5.2006, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 8
Всего: 58



А еще можно через "exec" и проверять код возврата.
А еще можно через socket (AF_UNIX...) + bind и тоже проверять код возврата. 

А еще можно фигней не маяться и тему закрыть. 


--------------------
PM MAIL WWW   Вверх
Hose
Дата 17.5.2006, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 11.4.2006

Репутация: нет
Всего: 1



Всем спасибо. Тему действительно можно закрывать.

P.S.  в итоге использовал fopen(). 
PM MAIL   Вверх
Mayk
Дата 17.5.2006, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 5
Всего: 134



GrayCardinal, вызов link'ов, unlink'ов и exec'ов вовсе не лишён смысла в отдельных случаях. 
В конце концов, если конечной целью является удалением файла, то почему бы не воспользоваться unlink'ом?


Цитата(Hose @  17.5.2006,  14:31 Найти цитируемый пост)
Тему действительно можно закрывать.

Тема помечена решенной. 


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0629 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.