Главная страница
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.029 c
2-1164536274
Ded222
2006-11-26 13:17
2006.12.10
Программа занимает 20 мб памяти в Диспетчере задач.


15-1164202060
Чапаев
2006-11-22 16:27
2006.12.10
В ДатаСете непонятность


6-1152988616
Kilima
2006-07-15 22:36
2006.12.10
idPop3, idSmtp, idMessage


3-1160030440
Term
2006-10-05 10:40
2006.12.10
Как работать с АДО напрямую не через компоненты


2-1163932776
KIT
2006-11-19 13:39
2006.12.10
Возникла проблема