Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.10;
Скачать: CL | DM;

Вниз

Проблема с получением короткого пути   Найти похожие ветки 

 
Destroyer ©   (2006-07-27 20:00) [0]

Такая проблема. Есть список из путей к файлам. Для них надо найти короткие пути (для *.bat файла).
Все хорошо, но при обработке такого пути:
C:\Documents and Settings\Username\Local Settings\Temporary Internet Files\Content.IE5\GTAZK1YV\?an?ao ?ON 6 ?anou1(nooaaioai).doc
В ShortPath возвращается предыдущее значение, т.е. не то что должно получиться в данный момент. Возможно это из-за имени файла в конце в неправильной кодировке. Фаил переименовать нельзя, он занят.
Как это исправить?
Код:
var
ClCache     : textfile;
ShortPath   : array [0..MAX_PATH] of Char;
I           : integer;
LockedFiles : TStrings;

for j:=0 to LockedFiles.Count-1 do
begin
GetShortPathName(PChar(LockedFiles[j]),ShortPath,Sizeof(ShortPath)-1);
writeln(ClCache,"del "+ """+ ShortPath +""");
end;


 
Степан   (2006-07-27 21:16) [1]

procedure GetShortFileNameEx(FileName: String): String;
var
 ChrPos: Integer;
begin
 repeat
   ChrPos := Pos("\", FileName);
   if ChrPos > 0 then
     Delete(FileName, 0, ChrPos);
 until ChrPos = 0;
 Result := FileName;
end;


По-моему, должно работать... Но если что, алгоритм ясен, как 2х2!..


 
Игорь Шевченко ©   (2006-07-27 22:05) [2]


> writeln(ClCache,"del "+ """+ ShortPath +""");


Здесь можно указывать длинное имя


 
Destroyer ©   (2006-07-27 22:20) [3]

Игорь Шевченко, я знаю что можно, но дело в том, что генерируется *.bat фаил, где нужно использовать короткие пути
Степан, может и 2х2, но я что-то не понял.
Короткий путь это типа:
C:\DOCUME~1\Username\LOCALS~1\TEMPOR~1\index.dat
Неужели искать слэши и "в ручную" приписывать ~1 ?
Подскажите пожалуйста.


 
Германн ©   (2006-07-27 22:49) [4]


> в ручную" приписывать ~1

Почему именно ~1? Может быть и ~2 и ~3 и т.д.


 
Игорь Шевченко ©   (2006-07-27 23:16) [5]


> Игорь Шевченко, я знаю что можно, но дело в том, что генерируется
> *.bat фаил, где нужно использовать короткие пути


В bat-файле можно использовать длинные имена.


 
Германн ©   (2006-07-27 23:43) [6]

Даже несмотря на замечание Игоря

> В bat-файле можно использовать длинные имена.

имхо, проблема не исчезнет. Если функция GetShortPathName не смогла найти на диске файл с именем C:\Documents and Settings\Username\Local Settings\Temporary Internet Files\Content.IE5\GTAZK1YV\?an?ao ?ON 6 ?anou1(nooaaioai).doc, значит и cmd его не найдёт.


 
Степан   (2006-07-28 10:17) [7]

Мда.. я тебя неправильно понял... Извини.

На крайняк можно попробовать удалить из пути имя файла, вызвать GetShortPathName, а потом прибавить к нему "?an?ao ?ON 6 ?anou1(nooaaioai).doc". Если это не сработает, тогда попробуй Unicode функцию может тогда функцию GetShortPathNameW



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

Текущий архив: 2006.12.10;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.031 c
2-1164332339
Sp1r1t
2006-11-24 04:38
2006.12.10
Экспорт из DLL


15-1163678149
Kolan
2006-11-16 14:55
2006.12.10
Что значит присоединенная информация :KAVICHS:$DATA


15-1164011165
john81
2006-11-20 11:26
2006.12.10
MS SQL SERVER


15-1164096145
DelphiLexx
2006-11-21 11:02
2006.12.10
Помогите создать функцию, умеющая красиво сокращать текст


2-1164362132
TIF
2006-11-24 12:55
2006.12.10
Глубокоуважаемый штрих код