Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.06.20;
Скачать: [xml.tar.bz2];

Вниз

Преобразование в длинное имя файла по короткому.   Найти похожие ветки 

 
t100   (2004-06-07 07:53) [0]

Привет.Тривиальный,может быть тупой вопрос,который часто встречается,но КАК???


 
sniknik ©   (2004-06-07 08:23) [1]

можно просто FindFirst с заданным по короткому, должно вернуть длинное. или GetFullPathName но она тоже будет диск читать (так думаю) потому что есть короткие имена которые различаются только порядковым номером в таблице размещения файлов, по другому узнать верное имя не получится.


 
SkyRanger ©   (2004-06-07 08:28) [2]

Восстанавление длинных имен файлов по известным коротким
--------------------------------------------------------------------------------

Автор: Boris  

Мой Windows понима~1 длинны~1 имена, а твой?  


//---------------------------------------------------------------------
// Восстанавливает длинные имена файлов по известным коротким (8.3)
// В качестве аргумента принимает полный или неполный (в т.ч. относительный)
// путь к файлу, например "C:\WINDOWS\РАБОЧИ~1\ИТАКДА~1.LNK" или
// "..\..\COMMON~1\BORLAN~1\BDE\BDEREA~1.TXT". Понимает сетевые имена.
// Возвращает полный(!) путь типа "C:\Windows\Рабочий стол\и так далее.lnk",
// "C:\Program Files\Common Files\Borland Shared\BDE\bdereadme.txt",
// "\\Computer\resource\Folder with long name\File with long name.ext"
//---------------------------------------------------------------------

function RestoreLongName(fn: string): string;

 function LookupLongName(const filename: string): string;
 var
   sr: TSearchRec;
 begin
   if FindFirst(filename, faAnyFile, sr) = 0 then
     Result := sr.Name
   else
     Result := ExtractFileName(filename);
   SysUtils.FindClose(sr);
 end;
 function GetNextFN: string;
 var
   i: integer;
 begin
   Result := "";
   if Pos("\\", fn) = 1 then
   begin
     Result := "\\";
     fn := Copy(fn, 3, length(fn) - 2);
     i := Pos("\", fn);
     if i <> 0 then
     begin
       Result := Result + Copy(fn, 1, i);
       fn := Copy(fn, i + 1, length(fn) - i);
     end;
   end;
   i := Pos("\", fn);
   if i <> 0 then
   begin
     Result := Result + Copy(fn, 1, i - 1);
     fn := Copy(fn, i + 1, length(fn) - i);
   end
   else
   begin
     Result := Result + fn;
     fn := "";
   end;
 end;
var
 name: string;
begin

 fn := ExpandFileName(fn);
 Result := GetNextFN;
 repeat
   name := GetNextFN;
   Result := Result + "\" + LookupLongName(Result + "\" + name);
 until length(fn) = 0;
end;


Взято из http://Delphiworld.narod.ru


 
t100   (2004-06-07 08:35) [3]

Я нашел раньше этот исходник,но туплю или он не работает.
RestoreLongName(имя короткого файла),а как возвратить длинное?


 
Anatoly Podgoretsky ©   (2004-06-07 08:40) [4]

Ты хочешь чтобы на основании такой короткой информации мы определели тупишь ты или нет?


 
t100   (2004-06-07 08:43) [5]

Как передать функции короткое имя,а она возвратила длинное имя файла.Вот такой я тупой...


 
Anatoly Podgoretsky ©   (2004-06-07 08:54) [6]

Да просто S := RestoreLongName(S)


 
t100   (2004-06-07 09:14) [7]

Функция возвращает путь и КОРОТКОЕ имя файла!!! Значит есть надежда,что я не туплю:-)


 
Григорьев Антон   (2004-06-07 09:15) [8]

Есть системная функция GetLongPathName, которая делает то, что нужно. Правда, для неё требуется Windows 2000 или 98 и выше.


 
sniknik ©   (2004-06-07 11:50) [9]

> Функция возвращает путь и КОРОТКОЕ имя файла!!! Значит есть надежда,что я не туплю:-)
наоборот со страшной силой. ;о)
задаеш путь который есть и файл которого нет.

позволил себе немного модифицировать данную процедуру, так будет понятней, замени LookupLongName этим

function LookupLongName(const filename: string): string;
var
  sr: TSearchRec;
begin
  if FindFirst(filename, faAnyFile, sr) = 0 then begin
    Result := sr.Name;
    FindClose(sr);
  end else
    Result := "Завать только существующие имена/пути!!!"; //ExtractFileName(filename);
end;


 
t100   (2004-06-07 14:52) [10]

НЕ РАБОТАЕТ функция и все!!!


 
t100   (2004-06-07 15:21) [11]

Мне нужно,чтобы вместо РУКОВО~1.DOC получалось РУКОВОДСТВО.DOC!!!


 
sniknik ©   (2004-06-07 15:32) [12]

> НЕ РАБОТАЕТ функция и все!!!
не может быть.

еще раз, если задаеш несуществуюший путь/имя на этом компе то вернет то же что и задавал. (или в моем варианте D:\Задавать только существующие имена/пути!!!\Задавать только существующие имена/пути!!! (не существует путь с первого же каталога))
выполни вот это что видиш в 1/2м лейбеле?

 if OpenDialog1.Execute then begin
   st:= OpenDialog1.FileName;
   GetShortPathName(@st[1], @st[1], length(st));
   Label1.Caption:= st;
   Label2.Caption:= RestoreLongName(Label1.Caption);
 end;  


 
sniknik ©   (2004-06-07 15:33) [13]

> Мне нужно,чтобы вместо РУКОВО~1.DOC получалось РУКОВОДСТВО.DOC!!!
а файл такой есть на компьютере? с именем РУКОВОДСТВО.DOC? вот это очень важная состовляющая.


 
Romkin ©   (2004-06-07 15:34) [14]

А что, GetFullPathName разве не подходит?


 
sniknik ©   (2004-06-07 15:36) [15]

Romkin ©   (07.06.04 15:34) [14]
предлагал, еще в [1] но чегото уперлись в этот код, он ведь видиш говорит неработает, а это несправедливо по отношению к автору. код рабочий.


 
t100   (2004-06-07 15:57) [16]

Файл существует,но имя не преобразовывается.
Исходник с лэйвлами работает,но ВСЕ ТОЖЕ ИМЯ ФАЙЛА,хотя путь преобразовывает.


 
Anatoly Podgoretsky ©   (2004-06-07 16:01) [17]

Чем докажешь что файл существует, может тебе просто кажется.


 
Gero ©   (2004-06-07 16:03) [18]


> t100   (07.06.04 15:21)
> Мне нужно

Раз НУЖНО - так НАПИШИ.
Что, своих мозгов нет?
К тому же тебе дали кучу примеров.
Не всегда же за тебя другие думать будут.


 
t100   (2004-06-07 16:12) [19]

>Чем докажешь что файл существует, может тебе просто кажется.
Могу выслать по почте.


 
Anatoly Podgoretsky ©   (2004-06-07 16:18) [20]

t100   (07.06.04 16:12) [19]
Это не есть доказательство.
За все время ты ни разу не привел имен, информации о том как передаешь и какие конкретные значения, текущий каталог.


 
t100   (2004-06-07 16:29) [21]

Есть файл ДО9D77~1.DOC,находящийся в папке C:\Documents and Settings\numas\Рабочий стол\прокурор.Реальное имя файла ДОГОВОР ПОДРЯДА.DOC.
Используя
  if OpenDialog1.Execute then begin
  st:= OpenDialog1.FileName;
  GetShortPathName(@st[1], @st[1], length(st));
  Label1.Caption:= st;
  Label2.Caption:= RestoreLongName(Label1.Caption);
end;  
получаем  Label1.Caption имеет значение C:\DOCUME~1\numas\0016~1\6DEF~1\9D77~1~1.DOC,а  Label2.Caption -C:\Documents and Settings\numas\Рабочий стол\прокурор\ДО9D77~1.DOC,ГДЕ ЖЕ преобразование имени файла?


 
Romkin ©   (2004-06-07 16:47) [22]

А в эксплорере этот файл смотрится именно как ДОГОВОР ПОДРЯДА.DOC ?


 
Anatoly Podgoretsky ©   (2004-06-07 16:51) [23]

RestoreLongName работает по текущему каталогу, будь добр удалить путь и сделать папку текущей.
По абсолютному пути работает sniknik ©   (07.06.04 11:50) [9]


 
Anatoly Podgoretsky ©   (2004-06-07 16:54) [24]

Romkin ©   (07.06.04 16:47) [22]
Неизваестно, это он опять нам забыл сказать

 st:= OpenDialog1.FileName;
 GetShortPathName(@st[1], @st[1], length(st));  Label1.Caption:= st;


 
t100   (2004-06-07 16:55) [25]

нет,смотрится как ДО9D77~1.DOC,в подсказке при наведении курсора заголовок файла ДОГОВОР ПОДРЯДА.DOC .


 
Anatoly Podgoretsky ©   (2004-06-07 16:58) [26]

t100   (07.06.04 16:55) [25]
Чего же ты хочешь, у тебя вообще нет длинного имени как такового, а курсор показывает свойства документа.


 
t100   (2004-06-07 17:02) [27]

Проблема то в том,что после не корректной установки ОС все имена файлов покаверкались на короткие,а хотелось бы их восстановить на длинные.


 
t100   (2004-06-07 17:06) [28]

Может выдирать с каждого такого вордовского файла первое предложение(определенное кол-во символов) и переименовывать имя в них?


 
Romkin ©   (2004-06-07 17:10) [29]

Вот с этого начинать надо было. Заметь, совершенно другой вопрос, нежели субж!
Тебе нужно взять имя документа и переименовать файл, дав ему это имя.


 
t100   (2004-06-07 17:17) [30]

Да,но теперь,что значит "взять имя документа"?


 
t100   (2004-06-07 17:27) [31]

Дайте тогда может кто ссылку,пожалуйста, для работы с документами Word через OLE.


 
Romkin ©   (2004-06-07 17:31) [32]

У некоторых файлов есть свойства. Особенно это относится к документам офиса. Если в ворде вызвать свойства документа, то их вполне можно увидеть. То же самое, если посмотреть свойства файла. У меня, например, на вкладке "Документ" есть поле Название.
И любое из этих свойств можно достать, через ActiveX. Многие свойства предопределены, например, название - это PIDSI_TITLE ;)
А достается все это через stgOpenStorage и юзание IPropertySet
В инете наверняка полно всего по этому вопросу. Если нет - плиз дальнейшие вопросы в новом топике в Corba & COM


 
sniknik ©   (2004-06-07 19:34) [33]

> У некоторых файлов есть свойства.
> меня, например, на вкладке "Документ" есть поле Название.
и они не всегда совпадают, открыл первы попавшийся doc
имя файла
Рассогласование данных в чеке.doc
а на вкладке в поле название
Проблема :  рассогласование данных в чеке и базе при параллельной загрузке

что согласитесь не одно и тоже ;о), файл не мой. думаю сначала сохранен в ворде а название после подкорректировано.


 
t100   (2004-06-08 07:55) [34]

Спасибо всем!


 
Koster   (2004-06-08 18:59) [35]

Во флэйм...



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.06.20;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.53 MB
Время: 0.036 c
1-1086265053
Eugene83
2004-06-03 16:17
2004.06.20
Доступ к переменным модуля Проэкта


6-1082979557
V@LER@N
2004-04-26 15:39
2004.06.20
Помогите с сокетом


14-1086098165
Exciter
2004-06-01 17:56
2004.06.20
Кто знает как работать с FB в С# ???


1-1086580409
t100
2004-06-07 07:53
2004.06.20
Преобразование в длинное имя файла по короткому.


14-1085802360
cyborg+
2004-05-29 07:46
2004.06.20
Что такое случилось с анкетами?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский