Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.027 c
10-1126181335
WhiteMag
2005-09-08 16:08
2006.12.10
Уничтожение сервера приложений


2-1164011733
Steep
2006-11-20 11:35
2006.12.10
ADO + Ms SQL Server


3-1160129268
alucard
2006-10-06 14:07
2006.12.10
Не могу переконвертировать *.db в *.txt


1-1161768709
BFG9k
2006-10-25 13:31
2006.12.10
Как скачать каринку с помощью idHTTPServer


15-1164110366
daser
2006-11-21 14:59
2006.12.10
Как отправить e-mail, зная SMTP-сервер и логин на почт. сервере?




   Наверх