Форум: "Основная";
Текущий архив: 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.08 c