Главная страница
    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.043 c
15-1146522948
Сумчатое
2006-05-02 02:35
2006.06.04
Сколько весят песочные часы, когда песчек сыплется ?


2-1147680301
manevil
2006-05-15 12:05
2006.06.04
ShellExecute


10-1120040942
12345
2005-06-29 14:29
2006.06.04
реализация клиента и сервера на разных языках


2-1148115210
DesperadO666
2006-05-20 12:53
2006.06.04
DBComboBox или ComboBox что поможет?


3-1144923173
KyRo
2006-04-13 14:12
2006.06.04
Диалог ConnectionString





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский