Про поиск файлов
От: Аноним  
Дата: 14.10.04 05:50
Оценка:
Какую строчку с путем нужно передать функции FindFirstFile, чтобы поиск файла осуществлялся в текущем каталоге, т.е. каталоге, откуда происходит запуск программы, просто "*" не катит

14.10.04 13:06: Перенесено из 'C/C++'
Re: Про поиск файлов
От: chp Россия  
Дата: 14.10.04 06:10
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Какую строчку с путем нужно передать функции FindFirstFile, чтобы поиск файла осуществлялся в текущем каталоге, т.е. каталоге, откуда происходит запуск программы, просто "*" не катит

Наверное текущий каталог надо туда передавать, вот пример из MSDN

#define _WIN32_WINNT 0x0400

#include <windows.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
  WIN32_FIND_DATA FindFileData;
  HANDLE hFind;

  printf ("Target file is %s.\n", argv[1]);
  hFind = FindFirstFile(argv[1], &FindFileData);
  if (hFind == INVALID_HANDLE_VALUE) 
  {
    printf ("Invalid File Handle. GetLastError reports %d\n", GetLastError ());
    return (0);
  } 
  else 
  {
    printf ("The first file found is %s\n", FindFileData.cFileName);
    FindClose(hFind);
    return (1);
  }
}
Re: Про поиск файлов
От: Mr. None Россия http://mrnone.blogspot.com
Дата: 14.10.04 09:37
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Какую строчку с путем нужно передать функции FindFirstFile, чтобы поиск файла осуществлялся в текущем каталоге, т.е. каталоге, откуда происходит запуск программы, просто "*" не катит


Выбирай на свой вкус:
1) findPath = "*.*";
2) findPath = ".\\*.*";
3)
char modulePath[MAX_PATH + 1];
if((int cnt = GetModuleFileName(0, modulePath, MAX_PATH)) > 0)
{
    std::string findPath(modulePath, cnt);
    findPath += "\\*.*";
}


4)
char currentPath[MAX_PATH];
if((int cnt = GetModuleFileName(0, modulePath, MAX_PATH)) > 0)
{
    std::string findPath(currentPath, cnt);
    findPath += "\\*.*";
}
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
Re[2]: Про поиск файлов
От: Mr. None Россия http://mrnone.blogspot.com
Дата: 14.10.04 09:38
Оценка:
Здравствуйте, Mr. None, Вы писали:

MN>Здравствуйте, Аноним, Вы писали:


А>>Какую строчку с путем нужно передать функции FindFirstFile, чтобы поиск файла осуществлялся в текущем каталоге, т.е. каталоге, откуда происходит запуск программы, просто "*" не катит


В последнем ошибся, вот так надо:
MN>Выбирай на свой вкус:

MN>4)

MN>
MN>char currentPath[MAX_PATH];
MN>if((int cnt = GetCurrentDirectory(currentPath, MAX_PATH)) > 0)
MN>{
MN>    std::string findPath(currentPath, cnt);
MN>    findPath += "\\*.*";
MN>}
MN>
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
Re[2]: Про поиск файлов
От: Pavel Dvorkin Россия  
Дата: 14.10.04 09:49
Оценка:
Привет!

"Mr. None" wrote:
>
> Здравствуйте, Аноним, Вы писали:
>
> А>Какую строчку с путем нужно передать функции FindFirstFile, чтобы поиск файла осуществлялся в текущем каталоге, т.е. каталоге, откуда происходит запуск программы, просто "*" не катит

Текущий каталог и каталог, откуда происходит запуск программы — не одно
и то же.

--
With best regards,
Pavel Dvorkin
Posted via RSDN NNTP Server 1.9 gamma
With best regards
Pavel Dvorkin
Re[3]: Про поиск файлов
От: XFollower  
Дата: 14.10.04 14:00
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Текущий каталог и каталог, откуда происходит запуск программы — не одно

PD>и то же.

Совершенно с Вами согласен, хотя это достаточно детское заблуждение и распространено...

Ну, а касательно того, как получить каталог, из которого был произведен запуск программы, то можно просто взять и разобрать коммандную строку(думаю, что для программиста это не должно быть проблемой ). Получить коммандную строку можно, используя ::GetCommandLine().
Re[3]: Про поиск файлов
От: Mr. None Россия http://mrnone.blogspot.com
Дата: 15.10.04 08:46
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Привет!


PD>"Mr. None" wrote:

>>
>> Здравствуйте, Аноним, Вы писали:
>>
>> А>Какую строчку с путем нужно передать функции FindFirstFile, чтобы поиск файла осуществлялся в текущем каталоге, т.е. каталоге, откуда происходит запуск программы, просто "*" не катит

PD>Текущий каталог и каталог, откуда происходит запуск программы — не одно

PD>и то же.

Я в курсе, поэтому и предложил оба варианта, чтобы человек сам выбрал.
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.