![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с получением короткого пути [D7, WinXP]
Destroyer © (2006-07-27 20:00:00)Такая проблема. Есть список из путей к файлам. Для них надо найти короткие пути (для *.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-28 10:17:00) [1]Мда.. я тебя неправильно понял... Извини.
На крайняк можно попробовать удалить из пути имя файла, вызвать GetShortPathName, а потом прибавить к нему "?an?ao ?ON 6 ?anou1(nooaaioai).doc". Если это не сработает, тогда попробуй Unicode функцию может тогда функцию GetShortPathNameW
Германн (2006-07-27 23:43:00) [2]Даже несмотря на замечание Игоря
> В 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-27 23:16:00) [3]
> Игорь Шевченко, я знаю что можно, но дело в том, что генерируется
> *.bat фаил, где нужно использовать короткие пути
В bat-файле можно использовать длинные имена.
Германн (2006-07-27 22:49:00) [4]
> в ручную" приписывать ~1
Почему именно ~1? Может быть и ~2 и ~3 и т.д.
Destroyer (2006-07-27 22:20:00) [5]Игорь Шевченко, я знаю что можно, но дело в том, что генерируется *.bat фаил, где нужно использовать короткие пути
Степан, может и 2х2, но я что-то не понял.
Короткий путь это типа:
C:\DOCUME~1\Username\LOCALS~1\TEMPOR~1\index.dat
Неужели искать слэши и "в ручную" приписывать ~1 ?
Подскажите пожалуйста.
Игорь Шевченко (2006-07-27 22:05:00) [6]
> writeln(ClCache,'del '+ '"'+ ShortPath +'"');
Здесь можно указывать длинное имя
Степан (2006-07-27 21:16:00) [7]
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!..