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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ф-ция, выдающая полный путь к файлу 
V
    Опции темы
586
Дата 5.8.2006, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Подскажите название функции, выдающей полный путь к файлу по короткому пути. Например, "cmd.exe" --> "C:\WINDOWS\SYSTEM32\cmd.exe"
PM   Вверх
MAKCim
Дата 5.8.2006, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



может это просто поиск файла?


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Daevaorn
Дата 5.8.2006, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

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



586
Почти то:
DWORD GetFullPathName(
  LPCTSTR lpFileName,
  DWORD nBufferLength,
  LPTSTR lpBuffer,
  LPTSTR* lpFilePart
);
http://msdn.microsoft.com/library/default....ullpathname.asp
PM MAIL WWW   Вверх
586
Дата 5.8.2006, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Мне надо, чтобы она искала по путям, указанным в переменной окружения %path% и в текущей папке, как это делает функция CreateProcess, или cmd.exe.
PM   Вверх
apook
Дата 5.8.2006, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вот то что надо:
Код

#include "iostream.h"
#include "dir.h"

int main(int argc, char *argv[])
{
char *p;
if ((argc > 1) && ((p = searchpath(argv[1])) != NULL))
    cout << "Полный путь к " << argv[1] << " - " << p << endl;
return 0;
}


Кстати CreateProcess однако не ишет в PATH ему надо точно указывать путь
иначе ищет в текущем каталоге и все.

Это сообщение отредактировал(а) apook - 5.8.2006, 13:11


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
Oleg_Ci
Дата 5.8.2006, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


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

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



http://forum.vingrad.ru/index.php?showtopic=106611
Здесь что-то похожее.

Это сообщение отредактировал(а) Олег4 - 5.8.2006, 13:17
PM MAIL   Вверх
586
Дата 5.8.2006, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Код
Caption=searchpath("cmd.exe");

Работает!!!

Цитата(apook @  5.8.2006,  14:07 Найти цитируемый пост)
Кстати CreateProcess однако не ишет в PATH ему надо точно указывать путь
Код
CreateProcess(0, "ws32", 0, 0, 0, 0, 0, 0, &st, &pi);

apook, спасибо.

А есть способ найти путь к файлу без расширения?
PM   Вверх
apook
  Дата 5.8.2006, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Такую функцию можешь написать сам. Примерно это может выглядеть так:

Код

#include "iostream.h"
#include "string.h"
#include "dir.h"


char *exist(char *filename)
{
char *p, expansion[5] = ".exe", *e;
if (((e = strrchr(filename, '.')) != NULL) && (strlen(e) <= 4));
else    strcat(filename, expansion);
p = searchpath(filename);
return p;
}


int main(int argc, char *argv[])
{
char *p, filename[15];
strcpy(filename, argv[1]);
if ((argc > 1) && ((p = exist(filename)) != NULL))
    cout << "Полный путь к " << argv[1] << " - " << p << endl;
else
    cout << "Файл " << filename << " не найден" << endl;    
return 0;
}
 

Стандартный алгоритм поиска файлов в ДОС таков:

   - Нет расширения имени файла и нет точки;  в  таком
     случае  производится  поиск  точного имени файла,
     если такое имя не найдено, добавляется расширение
     .com и поиск продолжается. Если и такого файла не
     найдено, то добавляется расширение .exe  и  поиск
     выполняется последний раз.

   - Расширение   имени  присутствует  -  производится
     поиск по точному имени файла;

Делай выводы и пиши навороченные функции smile  smile 

Это сообщение отредактировал(а) apook - 5.8.2006, 15:55


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
586
Дата 5.8.2006, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Всё, разобрался. Вот конечная функция:
Код
BOOL __stdcall RecoverPathName(char *pstr, char *b, int cb)
{
 if(!SearchPath(0, pstr, 0, cb, b, 0))
  if(!SearchPath(0, pstr, ".exe", cb, b, 0))
   if(!SearchPath(0, pstr, ".com", cb, b, 0))
    return 0;
 return 1;
}

Вопрос решён.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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