Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.06.04;
Скачать: [xml.tar.bz2];

Вниз

Как из текста вытащить путь к файлу?   Найти похожие ветки 

 
rolex2002   (2006-04-27 17:15) [0]

Имеется такой текст:
L        А      FП@      •м"0љ4Ж<–80љ4ЖzУ30љ4Ж <                     PаOР к:iўШ +00ќ /D:\                   H 1     R4uё Windows 2   пѕR4ggR4uё    V          W i n d o w s    L 1     R4Гё System32  4   пѕR4ggR4Гё    I!         S y s t e m 3 2    T 2  < R4дu  inkball.exe :   пѕR4дuR4дu    И         i n k b a l l . e x e      T            3       S         §%ь   TestOS D:\Windows\System32\inkball.exe  ) @ % S y s t e m R o o t % \ S y s t e m 3 2 \ I n k B a l l . e x e , - 1 5 0 5 2 . . . \ . . \ . . \ . . \ . . \ . . \ W i n d o w s \ S y s t e m 3 2 \ i n k b a l l . e x e  D : \ W i n d o w s \ s y s t e m 3 2 \ I n k B a l l . e x e      %SystemRoot%\system32\InkBall.exe                                                                                                                                                                                                                                   % S y s t e m R o o t % \ s y s t e m 3 2 \ I n k B a l l . e x e                                                                                                                                                                                                                                                                                                                                                                                                                                                                             %   Б   `      X       26l2219y8-04    *++2ЦLФHё#VЯl‡‰HяЊС Ъ« Cж‚1*++2ЦLФHё#VЯl‡‰HяЊС Ъ« Cж‚1    
Или например такой:
L        А      F›        OxД¶ЩГђZ пуHЖ OxД¶ЩГ<°
                   M PаOР к:iўШ +00ќ /C:\                   J 1     o4ЊЃ PROGRA~1  2   пѕш2гsp4!`   P r o g r a m   F i l e s    X 1     b4Z KOMPAS~1  @   пѕb4эYo4ђЃ   K O M P A S - 3 D   L T   V 6   P l u s    0 1     b4й” Bin    пѕb4эYo4ђЃ   B i n    L 2 <°
-0ПJ  KOMPASLT.Exe  0   пѕ-0ПJo4·p   K O M P A S L T . E x e      e            -       d         ‚^¤    C:\Program Files\KOMPAS-3D LT V6 Plus\Bin\KOMPASLT.txt  < . . \ . . \ . . \ P r o g r a m   F i l e s \ K O M P A S - 3 D   L T   V 6   P l u s \ B i n \ K O M P A S L T . E x e ) C : \ P r o g r a m   F i l e s \ K O M P A S - 3 D   L T   V 6   P l u s \ B i n       &   w   `      X       bodom           є!)TЊйаE©7EчТ“р/3MW/©ЪЄ А&ЄІМє!)TЊйаE©7EчТ“р/3MW/©ЪЄ А&ЄІМ    

Как из этих строк извлечь путь к файлу? (выделено жирным)


 
sicilla ©   (2006-04-27 18:00) [1]

Сделай поиск по тексту фразы типа ":\" или "C:\". Ну вообщем то, что знаешь. Далее читаешь строку до символа ".". Прибавляешь 3 символа и составляешь строку.


 
rolex2002   (2006-04-27 18:03) [2]


> Прибавляешь 3 символа и составляешь строку.

А вдруг расширение не из 3х символов? Такое бывает.


> Далее читаешь строку до символа "."

А вдруг в имени папки есть "."?


 
Palladin ©   (2006-04-27 18:11) [3]

однозначно - никак


 
rolex2002   (2006-04-27 18:12) [4]


> Palladin ©   (27.04.06 18:11) [3]
> однозначно - никак

А помоему вполне реально. Какие символы не могут быть в именах фалов/папок?


 
Palladin ©   (2006-04-27 18:16) [5]

ну вот тебе кусок файла

... d:\windows\ddd.ext 1 ...

ты можешь однозначно сказать "1" это уже не имя файла или еще имя?


 
rolex2002   (2006-04-27 18:20) [6]

Ну хотябы тогда чтобы примерно, или обчычно как бывает. Тоесть из предложенного тобой примера она выделила d:\windows\ddd.ext


 
Palladin ©   (2006-04-27 18:24) [7]

вот тебе другой кусок текста
... d:\windows\ddd.ext.rar. txt ea.exe ...

где тут кончается реальность и начинается хаос? и как тут примерно то? что похоже на обычно?


 
rolex2002   (2006-04-27 18:30) [8]

:)
Вот ещё одно облегчение: в конце адреса 100% будет 2 пробела. уже легче.


 
Cash ©   (2006-04-27 19:33) [9]

rolex2002:
Дай распечатку HEX таблицы этого текста, с самого начала файла (это важно!).
(Hex Workshop 3.1 это умеет хорошо делать)

Какой размер файла?
Что в файле хранится?
(это тоже важно)


 
sicilla ©   (2006-04-27 19:35) [10]

Удалено модератором


 
Volf_555 ©   (2006-04-27 21:34) [11]


> rolex2002   (27.04.06 17:15)  

Как я понял - это файл ярлыка и тебе необходимо получить информацию про него.
Вот подробный пример из DRKB23 (проверял - работает на УРА!):

Как прочитать shortcut"s link information?  

uses  
 ShlObj,  
 ComObj,  
 ActiveX,  
 CommCtrl;  

type  
 PShellLinkInfoStruct = ^TShellLinkInfoStruct;  
 TShellLinkInfoStruct = record  
   FullPathAndNameOfLinkFile: array[0..MAX_PATH] of Char;  
   FullPathAndNameOfFileToExecute: array[0..MAX_PATH] of Char;  
   ParamStringsOfFileToExecute: array[0..MAX_PATH] of Char;  
   FullPathAndNameOfWorkingDirectroy: array[0..MAX_PATH] of Char;  
   Description: array[0..MAX_PATH] of Char;  
   FullPathAndNameOfFileContiningIcon: array[0..MAX_PATH] of Char;  
   IconIndex: Integer;  
   HotKey: Word;  
   ShowCommand: Integer;  
   FindData: TWIN32FINDDATA;  
 end;  

procedure GetLinkInfo(lpShellLinkInfoStruct: PShellLinkInfoStruct);  
var  
 ShellLink: IShellLink;  
 PersistFile: IPersistFile;  
 AnObj: IUnknown;  
begin  
 // access to the two interfaces of the object  
 AnObj       := CreateComObject(CLSID_ShellLink);  
 ShellLink   := AnObj as IShellLink;  
 PersistFile := AnObj as IPersistFile;  

 // Opens the specified file and initializes an object from the file contents.  
 PersistFile.Load(PWChar(WideString(lpShellLinkInfoStruct^.FullPathAndNameOfLinkF ile)), 0);  
 with ShellLink do  
 begin  
   // Retrieves the path and file name of a Shell link object.  
   GetPath(lpShellLinkInfoStruct^.FullPathAndNameOfFileToExecute,  
     SizeOf(lpShellLinkInfoStruct^.FullPathAndNameOfLinkFile),  
     lpShellLinkInfoStruct^.FindData,  
     SLGP_UNCPRIORITY);  

   // Retrieves the description string for a Shell link object.  
   GetDescription(lpShellLinkInfoStruct^.Description,  
     SizeOf(lpShellLinkInfoStruct^.Description));  

   // Retrieves the command-line arguments associated with a Shell link object.  
   GetArguments(lpShellLinkInfoStruct^.ParamStringsOfFileToExecute,  
     SizeOf(lpShellLinkInfoStruct^.ParamStringsOfFileToExecute));  

   // Retrieves the name of the working directory for a Shell link object.  
   GetWorkingDirectory(lpShellLinkInfoStruct^.FullPathAndNameOfWorkingDirectroy,  
     SizeOf(lpShellLinkInfoStruct^.FullPathAndNameOfWorkingDirectroy));  

   // Retrieves the location (path and index) of the icon for a Shell link object.  
   GetIconLocation(lpShellLinkInfoStruct^.FullPathAndNameOfFileContiningIcon,  
     SizeOf(lpShellLinkInfoStruct^.FullPathAndNameOfFileContiningIcon),  
     lpShellLinkInfoStruct^.IconIndex);  

   // Retrieves the hot key for a Shell link object.  
   GetHotKey(lpShellLinkInfoStruct^.HotKey);  

   // Retrieves the show (SW_) command for a Shell link object.  
   GetShowCmd(lpShellLinkInfoStruct^.ShowCommand);  
 end;  
end;  

procedure TForm1.Button1Click(Sender: TObject);  
const  
 br = #13#10;  
var  
 LinkInfo: TShellLinkInfoStruct;  
 s: string;  
begin  
 FillChar(LinkInfo, SizeOf(LinkInfo), #0);  
 LinkInfo.FullPathAndNameOfLinkFile := "C:\WINNT\Profiles\user\Desktop\FileName.lnk";  
 GetLinkInfo(@LinkInfo);  
 with LinkInfo do  
   s := FullPathAndNameOfLinkFile + br +  
     FullPathAndNameOfFileToExecute + br +  
     ParamStringsOfFileToExecute + br +  
     FullPathAndNameOfWorkingDirectroy + br +  
     Description + br +  
     FullPathAndNameOfFileContiningIcon + br +  
     IntToStr(IconIndex) + br +  
     IntToStr(LoByte(HotKey)) + br +  
     IntToStr(HiByte(HotKey)) + br +  
     IntToStr(ShowCommand) + br +  
     FindData.cFileName + br +  
     FindData.cAlternateFileName;  
 Memo1.Lines.Add(s);  
end;  

// Only for D3 or higher.  
// for D1,D2 users: http://www.hitekdev.com/delphi/shellutlexamples.html  



Взято с сайта http://www.swissdelphicenter.ch/en/tipsindex.php


 
Volf_555 ©   (2006-04-27 21:36) [12]

Замечание:
LinkInfo.FullPathAndNameOfLinkFile := "C:\WINNT\Profiles\user\Desktop\FileName.lnk"; - значение этой строчки модифицируй под себя (укажи правильный путь к какому-нибудь ярлыку)


 
rolex2002   (2006-04-27 22:21) [13]

To Volf_555: Да это-то я как раз знаю. Да только вот бывают ярлыки у которых FullPathAndNameOfFileToExecute не совпадает с реальными(!). Да-да! Это не фантастика. А если вручную залезть в свойства ярлыка и увидеть там адрес на несуществующий объект, то нажав на кнопку "Найти объект..." на глазах поменяется адрес на "правильный", т.е. тот, где на самом деле находится этот объект. Вот такое вот бывает с некоторыми ярлыками.


 
Volf_555 ©   (2006-04-27 22:38) [14]


> Да это-то я как раз знаю. Да только вот бывают ярлыки у
> которых FullPathAndNameOfFileToExecute не совпадает с реальными(!
> ).

А не совпадают они по той причине, что объект, на который указывал этот ярлык или был перемещён, или был удалён. Одно из двух.


 
rolex2002   (2006-04-27 22:41) [15]

Не факт! Вот если у меня 2 винды. И в ярлыке прописано %SysDir% (или как там), то в разной винде будет по разному. Поэтому я и пытаюсь (см 1й пост) считать к какому файлу было последнее обращение.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2006.06.04;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.046 c
6-1137435217
guitarist
2006-01-16 21:13
2006.06.04
Hyperterminal


2-1147856225
VitV
2006-05-17 12:57
2006.06.04
DBLookupComboBox1-отображение текста.


1-1145987919
Volf_555
2006-04-25 21:58
2006.06.04
Как из консольного приложения корректно вызвать форму из DLL?


5-1132723716
ККВ
2005-11-23 08:28
2006.06.04
Не запускается программа в режиме отладки


2-1147756978
manevil
2006-05-16 09:22
2006.06.04
Еще один вопрос про OpenDialog





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский