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++.
|
Слова не мальчика. Не все же такие взрослые, а матчасть сейчас знать вообще не модно...
|
|
marconi |
Отправлено: 21.05.2004, 17:05 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 86
|
Ну может быть и я стану когдато грамотным. А матчасть изучаем потихоньку. Академиев ведь не заканчивал как вы. В нашем селе их тогда небыло, и компилю я только на своем компиляторе, и вообще такие как я пишут только всякие гадости. Так что в новом червяке в соавторах будут Gedeon и olegenty
Отредактировано 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++.
Просто это было хобби. А, кроме того, я свой уровень оцениваю, как очень средний. Направлений для роста, как грязи
|
|
marconi |
Отправлено: 22.05.2004, 15:13 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 86
|
Завидую. Честно.
|
|
Gedeon |
Отправлено: 24.05.2004, 09:17 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
Ну, кстати, я тоже самоучка, по образованию инженер электронной техники и к плюсам тоже не сразу пришел.
Червяк на билдэре да еще и с VCL , это ж полметра минимум .
|
|
Guest |
Отправлено: 26.05.2004, 20:17 |
|
Не зарегистрирован
|
QUOTE (Gedeon @ 24/05/2004, 10:19) |
Червяк на билдэре да еще и с VCL , это ж полметра минимум . |
Посмотрим что сколько получится получится. Я на Mydoom не претендую. Мне пока в общем разобратся надо. За червеписателей по 250000$ выдают. |
|
Gedeon |
Отправлено: 27.05.2004, 09:16 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
Хитрый Guest не представился, ато бы знали где 250000 заработать .
|
|
marconi |
Отправлено: 27.05.2004, 10:29 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 86
|
QUOTE (Gedeon @ 27/05/2004, 10:18) | Хитрый Guest не представился, ато бы знали где 250000 заработать . |
Да это я был, так получилось.
Вы что прошедших новостей не читали о червяке 1 мая?
Один "ганс" написал, Дядя бил Гейтс сказал что, заплатит тому кто даст информацию. Другой "ганс" сдал первого, получил 250000$. Потом писали что эти два гаврика знакомые были. Ну как бы небыло вот червяк за 25000. А года 2 в немецкой тюрьме наверно можно посидеть?
|
|