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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.01.2011, 03:02   #1
angelada
Пользователь
 
Регистрация: 02.04.2009
Сообщений: 11
По умолчанию

У меня такая тема!
Написал программу но нужно чтобы она работала следующим образом:

если в папке C:\123\ нет файла 123.exe надо чтобы программа его туда записала и закрылась.

а если там уже есть файл то программа бы выполнялась далее... то есть открылась бы основная форма form1

да забыл пишу на с++

Последний раз редактировалось Stilet; 20.01.2011 в 08:04.
angelada вне форума Ответить с цитированием
Старый 20.01.2011, 03:19   #2
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

http://www.techbytes.ca/techbyte103.html
Да вообще в гугле тысяча решений... ещё парочка:
Код:
#include <io.h>

bool FileExists (const char *fname)
{
return access(fname,0) != -1;
}
Код:
bool fexists(const char *filename)
{
  ifstream ifile(filename);
  return ifile;
}
Но самый кошерный по первой ссылке, stat для того и предназначен.

Единственное что, там это решение как-то перегружено. Создаются и инициализируются лишние переменные. Я бы сделал так:
Код:
#include <sys/stat.h> 

inline bool fileExists(string strFilename) { 
  struct stat stFileInfo; 
  return(stat(strFilename.c_str(), &stFileInfo)); 
}
Вот и всё.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su

Последний раз редактировалось Stilet; 20.01.2011 в 08:05.
Obey-Kun вне форума Ответить с цитированием
Старый 20.01.2011, 03:40   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

вообще стоит и ОС уточнить, благо можно тупо через АПИ CreateFile
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.01.2011, 03:46   #4
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Я ошибся! Оказывается, в POSIX есть функция access, предназначенная для проверки доступа к файлу.
Примерно так:
Код:
#include <unistd.h>

inline bool fileExists(const char *filename) { 
  return(access(filename, F_OK)); //или R_OK, если на считывание
}
p.s.: возможно, в винде нужно будет подключить io.h вместо unistd.h.

p.p.s: stat и access не являются частью стандарта C, они из POSIX. Но вот fopen точно должен везде работать, как и fstream.

Цитата:
вообще стоит и ОС уточнить, благо можно тупо через АПИ CreateFile
Cудя по грамматике и манере общения, речь идёт о Windows. Ну а ещё...
Цитата:
если в папке C:\123\ нет файла 123.exe
Тут 3 признака Windows:
  1. обратные слэши;
  2. использование термина «папка»;
  3. расширение «exe» у файла.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su

Последний раз редактировалось Stilet; 20.01.2011 в 08:05.
Obey-Kun вне форума Ответить с цитированием
Старый 20.01.2011, 13:04   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Тут 3 признака Windows:
обратные слэши;
использование термина «папка»;
расширение «exe» у файла.
стабильный один, использования пути с указанием диска.

Код:
#include <windows.h>

bool FileExistsA(const char* fn)
{
    HANDLE h=CreateFileA(fn,0,FILE_SHARE_DELETE|FILE_SHARE_READ|FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0);
    if(h==INVALID_HANDLE_VALUE)return false;
    CloseHandle(h);
    return true;
}

bool FileExistsW(const wchar_t* fn)
{
    HANDLE h=CreateFileW(fn,0,FILE_SHARE_DELETE|FILE_SHARE_READ|FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0);
    if(h==INVALID_HANDLE_VALUE)return false;
    CloseHandle(h);
    return true;
}

#ifdef UNICODE
    #define FileExists FileExistsW
#else
    #define FileExists FileExistsA
#endif
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.01.2011, 13:17   #6
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Прошу прощения за оффтоп. Я знал, что winapi плох. Но не думал, что настолько. Без бутылки не разберёшься.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Файл в папке zumm Общие вопросы Delphi 5 21.05.2010 18:30
Найти файл в заданной папке или её подпапках igor_564 Помощь студентам 2 25.03.2010 20:38
Есть ли проверка? ZuBy Общие вопросы Delphi 0 07.03.2010 13:58
Как сохранить файл в текущей папке? sid99999 Microsoft Office Excel 2 22.05.2009 11:59
как определить какие файлы есть в папке и вывести их имена в текстовый файл Tdoctor Паскаль, Turbo Pascal, PascalABC.NET 3 04.11.2008 05:18