C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Проверка файла
marconi
Отправлено: 20.05.2004, 22:22


Станционный диспетчер

Группа: Участник
Сообщений: 86



Добрый день, вечер.
Подскажите функцию Си (или API) для проверки наличия файла.
Ну например, проверить есть в директории Windows файл "123.exe" или нет.
exp
Отправлено: 21.05.2004, 01:09


Мастер участка

Группа: Участник
Сообщений: 304



CODE

if(FileExists("C:\\Windows\\123.exe"))
{
ShowMesage("А ведь он все-таки существует!");
}
else
{
ShowMessage("Ни::censured:: там нету.")
}
Gedeon
Отправлено: 21.05.2004, 08:42


Ветеран

Группа: Модератор
Сообщений: 1742



FileExists("C:\\Windows\\123.exe") — это VCL функция, а если надо апи, то
CODE

HANDLE FindFirstFile(
LPCTSTR lpFileName,
LPWIN32_FIND_DATA lpFindFileData
);


Parameters
lpFileName
[in] Pointer to a null-terminated string that specifies a valid directory or path and file name, which can contain wildcard characters (* and ?). If the string ends with a wildcard, a period, or a directory name, the user must have access to the root and all subdirectories on the path.
In the ANSI version of this function, the name is limited to MAX_PATH characters. To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. For more information, see Naming a File.

Windows Me/98/95: This string must not exceed MAX_PATH characters.
lpFindFileData
[out] Pointer to the WIN32_FIND_DATA structure that receives information about the found file or subdirectory.
Return Values
If the function succeeds, the return value is a search handle used in a subsequent call to FindNextFile or FindClose.

If the function fails, the return value is INVALID_HANDLE_VALUE. To get extended error information, call GetLastError.

В принципе нетрудно завернуть ее в свою функция, котрая будет просто вызываться одной строкой.
ЗЫ Не забудте после поиска применить FindClose.

Отредактировано Gedeon — 21/05/2004, 09:47
AVC
Отправлено: 21.05.2004, 09:22


Ветеран

Группа: Модератор
Сообщений: 1583



Для API можно воспользоваться
DWORD GetFileSize(
HANDLE hFile, // handle of file to get size of
LPDWORD lpFileSizeHigh // address of high-order word for file size
);
если возвращается ошибка, то файла нет или разрушен пеуть к нему.
Gedeon
Отправлено: 21.05.2004, 09:29


Ветеран

Группа: Модератор
Сообщений: 1742



QUOTE (AVC @ 21/05/2004, 10:24)
Для API можно воспользоваться
DWORD GetFileSize(
HANDLE hFile, // handle of file to get size of
LPDWORD lpFileSizeHigh // address of high-order word for file size
);
если возвращается ошибка, то файла нет или разрушен пеуть к нему.

Так для этого надо сначала знать его HANDLE, который получаем с помощью FindFirstFile|FindNextFile.
AVC
Отправлено: 21.05.2004, 09:32


Ветеран

Группа: Модератор
Сообщений: 1583



Извиняюсь. Был не прав. Перемкнуло, что первый параметр имя файла.
marconi
Отправлено: 21.05.2004, 10:18


Станционный диспетчер

Группа: Участник
Сообщений: 86



Большое спасибо. Получается, что Си функция FileExists для проверки наличия файла попроще.
Gedeon
Отправлено: 21.05.2004, 10:47


Ветеран

Группа: Модератор
Сообщений: 1742



QUOTE (marconi @ 21/05/2004, 11:20)
Большое спасибо. Получается, что Си функция FileExists для проверки наличия файла попроще.

Еще раз FileExists — функция VCL, она попроще, однако при переносе проекта на другой компилятор работать не будет, а функция FindFirstFile будет работать и на VC++.
olegenty
Отправлено: 21.05.2004, 14:23


Ветеран

Группа: Модератор
Сообщений: 2412



QUOTE

Еще раз FileExists — функция VCL, она попроще, однако при переносе проекта на другой компилятор работать не будет, а функция FindFirstFile будет работать и на VC++.

Слова не мальчика. Не все же такие взрослые, а матчасть сейчас знать вообще не модно... biggrin.gif
marconi
Отправлено: 21.05.2004, 17:05


Станционный диспетчер

Группа: Участник
Сообщений: 86



Ну может быть и я стану когдато грамотным. А матчасть изучаем потихоньку. Академиев ведь не заканчивал как вы. В нашем селе их тогда небыло, и компилю я только на своем компиляторе, и вообще такие как я пишут только всякие гадости. Так что в новом червяке в соавторах будут Gedeon и olegenty smile.gif

Отредактировано marconi — 21/05/2004, 18:25
olegenty
Отправлено: 22.05.2004, 09:52


Ветеран

Группа: Модератор
Сообщений: 2412



Академиев по программированию я тоже не кончал. Самоучка. При том начинал с Modula-2, потом Pascal, потом Delphi, и уже только потом C++, С++ Builder, МS VC++, VB. На C++ Builder остановился только потому, что в VC++ уж очень нудно создавать пользовательский интерфейс для работы с БД. Хотя, с текущим грузов знаний, сейчас я бы уже не выбрал С++ Builder, а так и остановился бы на MS VC++.

Просто это было хобби. А, кроме того, я свой уровень оцениваю, как очень средний. Направлений для роста, как грязи smile.gif
marconi
Отправлено: 22.05.2004, 15:13


Станционный диспетчер

Группа: Участник
Сообщений: 86



Завидую. Честно. smile.gif
Gedeon
Отправлено: 24.05.2004, 09:17


Ветеран

Группа: Модератор
Сообщений: 1742



Ну, кстати, я тоже самоучка, по образованию инженер электронной техники и к плюсам тоже не сразу пришел.
Червяк на билдэре да еще и с VCL ohmy.gif ohmy.gif ohmy.gif , это ж полметра минимум biggrin.gif biggrin.gif biggrin.gif .
Guest
Отправлено: 26.05.2004, 20:17


Не зарегистрирован







QUOTE (Gedeon @ 24/05/2004, 10:19)

Червяк на билдэре да еще и с VCL ohmy.gif ohmy.gif ohmy.gif , это ж полметра минимум biggrin.gif biggrin.gif biggrin.gif .

Посмотрим что сколько получится получится. Я на Mydoom не претендую. Мне пока в общем разобратся надо. За червеписателей по 250000$ выдают. biggrin.gif biggrin.gif biggrin.gif
Gedeon
Отправлено: 27.05.2004, 09:16


Ветеран

Группа: Модератор
Сообщений: 1742



Хитрый Guest не представился, ато бы знали где 250000 заработать biggrin.gif .
marconi
Отправлено: 27.05.2004, 10:29


Станционный диспетчер

Группа: Участник
Сообщений: 86



QUOTE (Gedeon @ 27/05/2004, 10:18)
Хитрый Guest не представился, ато бы знали где 250000 заработать biggrin.gif .

Да это я был, так получилось.
Вы что прошедших новостей не читали о червяке 1 мая?
Один "ганс" написал, Дядя бил Гейтс сказал что, заплатит тому кто даст информацию. Другой "ганс" сдал первого, получил 250000$. Потом писали что эти два гаврика знакомые были. Ну как бы небыло вот червяк за 25000. А года 2 в немецкой тюрьме наверно можно посидеть?
biggrin.gif biggrin.gif biggrin.gif

Вернуться в Вопросы программирования в C++Builder