Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 425

/ вопрос решён /

Доброго времени суток, уважаемые эксперты!
Подскажите как можно извлечь полный путь к файлу, зная название.
В этом процессе не должен принимать участия реестр, так как фаил может быть любым. Есть предположение что нужно подсмотреть в файловой системе, но как это сделать?

Примечание #1 (19 июня 2011, 23:07):
Да, забыл упомянуть что фаил не запущен.
Для этого это всё и делается, чтоб запустить его.
Может есть другие пути решения данной проблемы, без извлечения полного пути?

QWERYTY Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: QWERYTY (статус: Посетитель)
Вопрос отправлен: 19 июня 2011, 23:03
Состояние вопроса: решён, ответов: 0.


Мини-форум вопроса

Всего сообщений: 41; последнее сообщение — 12 марта 2012, 02:59; участников в обсуждении: 7.

Страницы: [« Предыдущая] [1] [2] [3] [Следующая »]

min@y™

min@y™ (статус: Доктор наук), 20 июня 2011, 13:23 [#21]:

А, ну тогда только поиск FindFirst(), FindNext(), FindClose(). Нашёл файл, загрузил, проверил на контрольную сумму, сигнатуру или

Цитата (QWERYTY):

ещё может на чё для уверенности

и запускай.
Всё равно, не понимаю, нахрена это надо! Приведи практический пример использования такой байды.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Sonic-X

Sonic-X (статус: Посетитель), 20 июня 2011, 13:35 [#22]:

Если нужно запустить файл из приложения, то обычно запускаемый файл при первом запуске(инсталляции) пишет в реестр путь по какому он находится, чтоб всякие Updater'ы знали где его искать, а так все диски лопатить чтобы найти 1 файл(а если у меня диск на 2Тб) это бред.
Егор

Егор (статус: 10-ый класс), 20 июня 2011, 17:57 [#23]:

Цитата (QWERYTY):

Нашёл вчера код который действительно проводит поиск, но он делает это немыслимо долго. Это делалось на одном диске.
Но их может быть больше.
об этом и речь. поиск будет доооооооолгим.
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
QWERYTY

QWERYTY (статус: Посетитель), 22 июня 2011, 01:00 [#24]:

То Sonic-X

Ага, 3 диска по 2ТВ, и все забиты под завязку одинаковыми файлами. Во всех папках Setup.exe и Readme.txt )))
Если человек пишет что реестр не должен учавствовать, наверное можно сделать предположение что он не собирается использовать реестр?
Бред или не бред не было известно, я думал что эти данные легко передадутся какой нибудь функцией. FindFirst даёт любую информацию кроме пути. Насчёт того что файлов может быть много не спорю, но и решение проблемы напрашивается само собой. Например функция должна принимать данные которые позволяют понять тот фаил или нет, ну а на выходе ясен пенёк что. например путь или пустая строка. Наверное это только инопланетянам под силу.


Вы начинаете слишком глубоко рыть, как будто я обязательно собираюсь загрузить свою прогу к вам на компы, и заставить юзать её каждый день.

Разумеется заданный вопрос максимально короткий чтоб не разводить здесь мыльную оперу. Мы уже ушли в сторону от сути вопроса, и обсуждаем не поиск пути, а запуск файла, каким он должен быть, сколько их на диске. Естественно в вопросе я не стал указывать что буду устраивать серьёзную проверку файла перед запуском. Видимо показалось что я решил найти фаил, и в тупую на дурачка запустить его.



Глядя на ответы, в вопросах других участников, становится не понятным зачем так называемые эксперты начинают мутатень разводить. Ты если не знаешь или не собираешься помогать, зачем вообще писать всякую шляпу, типа:
Зачем тебе это надо? Где это может понадобиться?

Если человек задаёт вопрос(после гуглинья естественно) то поверьте на слово, ему это надо и вероятно гдето пригодится. А считуация может быть следующей:
Человек гуглил но инфы по данной теме мало, и в такой ситуации видимо надо либо помочь(если есть желание), либо не писать всякую фигню. Также человек мог найти несколько способов решения своей проблемы и интересуется задавая вопрос что посоветуют расчитывая что ответят на уровне профи, а сам он не разбирается на столько чтоб определиться с методом. Например человек не разбирается в сетях и протоколах, и видит что решить его проблему можно на InDy или на сокетах.
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
bugmenot

bugmenot (статус: 3-ий класс), 22 июня 2011, 03:55 [#24]:

жалобы на свою неспособность внятно сформулировать вопрос?

и поставь уже себе спеллчекер
виконання програми розпочинається з того самого мiсця, де призупинилося.

Егор

Егор (статус: 10-ый класс), 22 июня 2011, 04:31 [#25]:

Цитата (QWERYTY):

Глядя на ответы, в вопросах других участников, становится не понятным зачем так называемые эксперты начинают мутатень разводить. Ты если не знаешь или не собираешься помогать, зачем вообще писать всякую шляпу, типа:
Зачем тебе это надо? Где это может понадобиться?
эксперты чуваки умные. и если задают подобные вопросы, значит не зря. опыт есть. сталкивались со всяким. может, тебе вовсе не такое решение нужно.
запусти стандартный поиск на диске С: и найди файл notepad.exe - увидишь, сколько времени будет искаться первый найденный файл, совпадающий по имени. и это только самое простое условие.
ни одна нормальная прога не раскидывает файлы. и не ищет чужих файлов, если не знает, где они лежат. обычно все файлы лежат по заранее определённым путям. зачем ты будешь свой файл кидать в неизвестную папку? а может его потом юзер удалит? если собираешься файл запускать, то почему не положить его в папку program files/mySuperProg? или ты вируса хочешь написать, которого, типа, потом фиг найдёшь? но это:
а) тупой ход (ты сам вируса не найдёшь)
б) файл будет найден юзером. ты же его как-то будешь находить? вот и юзер найдёт.
в) вообще, темы создания вирусов здесь не обсуждаются.

Цитата (QWERYTY):

сам он не разбирается на столько чтоб определиться с методом
в том-то и дело, что ты не разбираешься, но с методом уже определился. а тебе говорят, что метод - хрень полная. забудь про этот метод. это будет долго и неэффективно. затем спрашивают - зачем тебе это? для того, чтобы предложить другой метод. более правильный, эффективный. а ты упёрся. "нет, мне надо как я сказал".
и вообще, я вижу, что ты уходишь от ответа. уход от ответа - не есть хорошо. если и дальше не будешь отвечать, то в форуме будет только флейм и ничего полезного. мы постебёмся, тебе обидно будет.
так почему ты уходишь от ответа?
а) ты и сам не знаешь, где такое можно применить
чисто побаловаться конечно, можно. но тебе объяснили перспективность идеи.
б) смутно что-то такое вырисовывается (супер-пупер идея)
в) идея уже вырисовалась, но не хочешь говорить (типа, чтобы идею не спёрли).
по поводу идей - тебе объяснили перспективы. выдавай свою идею - скажем лучшие пути решения. потому что наверняка много людей об этом уже думали и придумали что-то.

кратко, ответ на вопрос:
поиск файла, удовлетворяющего каким-либо условиям, всегда очень долгий и быстрым сделать эту вещь нельзя - чисто аппаратное ограничение.
тебя устраивает долгий поиск? (поиск может длится несколько секунд, минут, а то и часов)

а функцию поиска написать можно. это не представляет сложности.
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
Егор

Егор (статус: 10-ый класс), 22 июня 2011, 04:35 [#26]:

скажи, для чего - подскажу более быстрый метод
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
bugmenot

bugmenot (статус: 3-ий класс), 22 июня 2011, 04:54 [#27]:

О, опять много букв :­-­D
Я опять не читал, но осуждаю :­-­P

PS: Отвечатели тоже постоянно грешат тем, что трансформируют вопросы в то, что они знают и дают хороший, правильный (но во многих случаях бесполезный) ответ.
виконання програми розпочинається з того самого мiсця, де призупинилося.

min@y™

min@y™ (статус: Доктор наук), 22 июня 2011, 10:08 [#28]:

Цитата (QWERYTY):

Глядя на ответы, в вопросах других участников, становится не понятным зачем так называемые эксперты начинают мутатень разводить. Ты если не знаешь или не собираешься помогать, зачем вообще писать всякую шляпу, типа: Зачем тебе это надо? Где это может понадобиться?

Посмотри вот это. Очень даже по теме дискуссии.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Вадим К

Вадим К (статус: Академик), 22 июня 2011, 10:44 [#29]:

Попробую перевести дискуссию в другое русло.
Если вопрошающий говорит о запуске приложения и о ShellExecute, то тогда есть простое решение. Нужно просто делать также, как и делает это windows - она смотрит переменную окружения PATH, берет оттудова пути и пытается по каждому из них найти заданный файл. Так как путей редко бывает более десятка (если только это не машина компьютерного извращенца), то все очень быстро выверяется.
После небольшого исследования, рождается такой код
Function SearchFullName(FileName:string):string;
  var SPPath:array[0..255] of char;
  pPath:PChar;
begin
  SearchFullName := '';
  if SearchPath(nil, PChar(FileName), nil, 255, SPPath, pPath)>0 
    then SearchFullName := StrPas(SPPath);
end;
Используем Showmessage(SearchFullName('calc.exe'));
функция SearchPath делает основную работу.

Почему то мне кажется, что эта функция решит задачу.
Галочка "подтверждения прочтения" - вселенское зло.
min@y™

min@y™ (статус: Доктор наук), 22 июня 2011, 10:59 [#30]:

Цитата (Вадим К):

Почему то мне кажется, что эта функция решит задачу.
Решит, если искомый файл валяется в одном из каталогов из PATH. И не решит в противном случае.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Вадим К

Вадим К (статус: Академик), 22 июня 2011, 11:02 [#31]:

Цитата (min@y™):

Решит, если искомый файл валяется в одном из каталогов из PATH.

Я именно об этом и написал:)
Галочка "подтверждения прочтения" - вселенское зло.
bugmenot

bugmenot (статус: 3-ий класс), 22 июня 2011, 11:59 [#32]:

Цитата (min@y™):

вот это. Очень даже по теме

и снова Алексеев перевернулся в гробу...

Цитата (Вадим К):

После небольшого исследования, рождается такой код
Function EnvFNS(Fn: string): string;

после небольшого исследования публикуется копипаста из интернетов :­-­P Николай Иванович, это Вы?
виконання програми розпочинається з того самого мiсця, де призупинилося.

Вадим К

Вадим К (статус: Академик), 22 июня 2011, 12:36 [#33]:

исследование == гугл.
Галочка "подтверждения прочтения" - вселенское зло.
QWERYTY

QWERYTY (статус: Посетитель), 22 июня 2011, 21:30 [#34]:

Всем спасибо!
По человечески в последних сообщениях всё разъяснили, без лишней воды и демогогий.

Вирусов я не пишу, не на столько силен в программировании да и желания особого нет.
Запускать я хотел на своем компе, а потом интересно стало как это сделать.
Больше можно мозг не ломать над данной задачей.
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
QWERYTY

QWERYTY (статус: Посетитель), 25 июня 2011, 02:00 [#35]:

bugmenot, очередная загадка?

Что такое спеллчекер??
С меня уже хватает этих слов заморских:
сниффинг, парсинг, спуффинг, сплайсинг...
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.

25 июня 2011, 02:07: Вопрос закрыт (решение принял автор вопроса — QWERYTY): Ответ не нужен

25 июня 2011, 17:36: Вопрос вновь открыт (изменение состояния произвёл автор вопроса — QWERYTY): Дополнить

QWERYTY

QWERYTY (статус: Посетитель), 25 июня 2011, 18:07 [#36]:

Посмотри вот это. Очень даже по теме дискуссии.

Не совсем по теме, мне в этой ситуации ни Z не нужен ни Y.
Цель была запустить фаил, а вопрос был как раз о том что я не могу сделать. Я же не буду зная как запускаются файлы, спрашивать как запустить фаил.
Так что не пойму какое отношение имеет материал в ссылке к моей ситуации. Я же не задавал вопрос, например:

Я хочу запустить фаил, но не знаю как извлеч путь до него.
Не подскажите как собрать вертолёт на коленке в своём гараже, чтоб слетать в магазин за книгой и выяснить как ркшить задачу?

Касательно ссылки:
И много у нас таких философов по стране? Ему бы в прокуратуре работать. Видите сразу раскусил в чём проблема новичков? )))

Егор там спрашивал зачем запускать фаил и каким он будет.
Он хочет сказать что если я ему скажу зачем, то у него сразу возникнет решение в голове? Тем более не понятно как ответить на такой вопросс. Хочу у себя на компе запустить нужный мне фаил, потому что мне нужно его запустить. Или как?
Что за фаил? Вот этот вопрос совсем не понятен.
Он хочет сказать что если бы я указал расширение файла то у него опять таки родилось решение в голове. Или он хотел узнать зарегистрированный тип файлов или нет, есть ли приложение в котором должен будет открыться фаил.
Тем более я пояснил что фаил EXE на второй странице минифорума, а он на третей пишет что я не отвечаю на вопросы.
Или для него принципиально важно какой именно EXE, я вроде читая описания функций никаких ограничений не встречал.
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
QWERYTY

QWERYTY (статус: Посетитель), 25 июня 2011, 18:23 [#37]:

Я не спорю с материалом в ссылке, просто считаю что можно было не засерать интернет ёжику понятными истинами.
Интернет итак очень засран, на всех страницах текст под копирку(ну в пределах одного поиска разумеется). Я вот считаю что нужно закрывать такие сайты автоматически, смотреть у кого дата старше, остальные ликвидировать.
Если это цитирование, то текст должен быть длиньше на какое то количество процентов например, ибо цитирование предполагается в контексте какого то другого повествования.
Просто цитировать без каких либо дополнений, новых мыслей считаю не целесообразным.
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.

17 июля 2011, 05:30: Вопрос закрыт (решение принял автор вопроса — QWERYTY): Не нуждаюсь в решении

4 марта 2012, 18:59: Статус вопроса изменён на решённый (изменил автор вопроса — QWERYTY)

QWERYTY

QWERYTY (статус: Посетитель), 4 марта 2012, 19:19 [#38]:

Перечитал с начала, весело!

Поделюсь решением которое мне пришлось принять(так делается во всех приложениях где заведомо не известно расположение файла), вдруг кому пригодится.
Кидаем на форму кнопку, оупендиалог, и пишем в обработчик кнопки:
{Code}
if (OpenDialog1->Execute()) {
ShellExecute(NULL, "open", "Нужное имя.exe", NULL, (ExtractFileDir(OpenDialog1->FileName)).t_str(), SW_SHOWNORMAL);

{/Code}
На данный момент кодирую на си, но переделать не сложно.
В фильтре оупендиалога пишем(например):
Программа (Нужное имя.exe) | Нужное имя.exe

В интернете можно найти примеры использования ShellExecute с заполнением командной строки, но я прочитав описание к ней использую именно так.
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
min@y™

min@y™ (статус: Доктор наук), 5 марта 2012, 09:14 [#39]:

Пипец! ГЕНИАЛЬНО, бл@ать!!!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Егор

Егор (статус: 10-ый класс), 5 марта 2012, 18:14 [#40]:

:-D
моя валяться под столом
:-D
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.

Страницы: [« Предыдущая] [1] [2] [3] [Следующая »]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 25 апреля 2026, 23:26
Выполнено за 0.04 сек.