Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.056 c
15-1163565271
MBo
2006-11-15 07:34
2006.12.10
Новости от Borland


15-1164108292
V.I.P
2006-11-21 14:24
2006.12.10
Нужно сделать программу за $$$


2-1164206206
REA
2006-11-22 17:36
2006.12.10
Как обменять два TListItem?


2-1163927657
Ded
2006-11-19 12:14
2006.12.10
вопросик


3-1160023719
alucard
2006-10-05 08:48
2006.12.10
Подскажите как скопировать DataSet





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский