Форум: "WinAPI";
Текущий архив: 2006.12.10;
Скачать: [xml.tar.bz2];
ВнизПроблема с получением короткого пути Найти похожие ветки
← →
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 вся ветка
Форум: "WinAPI";
Текущий архив: 2006.12.10;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.066 c