Перетворення в довге ім'я файлу за коротким.
Прівет.Трівіальний, може бути тупий питання, який часто зустрічається, але ЯК.
Мій Windows розумі
1 імена, а твій? # XA0;
// ------------------------------------------------ ---------------------
// Відновлює довгі імена файлів по відомим коротким (8.3)
// Як аргумент приймає повний або неповний (в т.ч. відносний)
// шлях до файлу, наприклад "C: \ WINDOWS \ робочий
1.LNK "або
// ".. \ .. \ COMMON
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;
# XA0; fn: = ExpandFileName (fn);
# XA0; Result: = GetNextFN;
# XA0; repeat
# XA0; # XA0; name: = GetNextFN;
# XA0; # XA0; Result: = Result + "" + LookupLongName (Result + "" + name);
# XA0; until length (fn) = 0;
end;
Я знайшов раніше цей исходник, але туплю або він не працює.
RestoreLongName (ім'я короткого файлу), а як повернути довге?
Ти хочеш щоб на підставі такої короткої інформації ми определелі тупиш ти чи ні?
Як передати функції коротку назву, а вона повернула довге ім'я файла.Вот такий я тупий.
Так просто S: = RestoreLongName (S)
Функція повертає шлях і КОРОТКЕ ім'я файлу. Значить є надія, що я не туплю :-)
> Функція повертає шлях і КОРОТКЕ ім'я файлу. Значить є надія, що я не туплю :-)
навпаки зі страшною силою. ; О)
задаеш шлях який є і файл якого немає.
дозволив собі трохи модифікувати дану процедуру, так буде зрозуміліше, заміни LookupLongName цим
function LookupLongName (const filename: string): string;
var
# XA0; sr: TSearchRec;
begin
# XA0; if FindFirst (filename, faAnyFile, sr) = 0 then begin
# XA0; # XA0; Result: = sr.Name;
# XA0; # XA0; FindClose (sr);
# XA0; end else
# XA0; # XA0; Result: = "завал тільки існуючі імена / шляху."; // ExtractFileName (filename);
end;
НЕ ПРАЦЮЄ функція і все.
Мені потрібно, щоб замість Рукова
1.DOC виходило РУКОВОДСТВО.DOC.
> НЕ ПРАЦЮЄ функція і все.
не може бути.
ще раз, якщо задаеш несуществуюшій шлях / ім'я на цьому комп'ютері то поверне той же що і ставив. (Або в моєму варіанті D: \ Задавати тільки існуючі імена / шляху. \ Задавати тільки існуючі імена / шляху. (Не існує шлях з першого ж каталогу))
виконай ось це що видиш в 1 / 2м лейбеле?
# XA0; if OpenDialog1.Execute then begin
# XA0; # XA0; st: = OpenDialog1.FileName;
# XA0; # XA0; GetShortPathName (@st [1], @st [1], length (st));
# XA0; # XA0; Label1.Caption: = st;
# XA0; # XA0; Label2.Caption: = RestoreLongName (Label1.Caption);
# XA0; end; # XA0;
> Мені потрібно, щоб замість Рукова
1.DOC виходило РУКОВОДСТВО.DOC.
а файл такий є на комп'ютері? з ім'ям РУКОВОДСТВО.DOC? ось це дуже важлива состовляющих.
А що, GetFullPathName хіба не підходить?
Файл існує, але ім'я не перетворюється.
Исходник з лейвламі працює, але ВСЕ ТЕЖ ІМ'Я ФАЙЛА, хоча шлях перетворює.
Чим доведеш що файл існує, може тобі просто здається.
> t100 # XA0; (07.06.04 15:21)
> Мені потрібно
Раз ПОТРІБНО - так НАПИШИ.
Що, своїх мізків немає?
До того ж тобі дали купу прикладів.
Не завжди ж за тебе інші думати будуть.
> Чим доведеш що файл існує, може тобі просто здається.
Можу вислати поштою.
t100 # XA0; (07.06.04 16:12) [19]
Це не є доказ.
За весь час ти ні разу не привів імен, інформації про те як передаєш і які конкретні значення, поточний каталог.
Є файл ДО9D77
1.DOC, що знаходиться в папці C: \ Documents and Settings \ numas \ Робочий стіл \ прокурор.Реальное ім'я файлу ДОГОВІР ПОДРЯДА.DOC.
використовуючи
# XA0; if OpenDialog1.Execute then begin
# XA0; st: = OpenDialog1.FileName;
# XA0; GetShortPathName (@st [1], @st [1], length (st));
# XA0; Label1.Caption: = st;
# XA0; Label2.Caption: = RestoreLongName (Label1.Caption);
end; # XA0;
отримуємо # XA0; Label1.Caption має значення C: \ DOCUME
1.DOC, а # XA0; Label2.Caption -C: \ Documents and Settings \ numas \ Робочий стіл \ прокурор \ ДО9D77
1.DOC, ДЕ Ж перетворення імені файлу?
А в експлорері цей файл виглядає саме як ДОГОВІР ПОДРЯДА.DOC?
# XA0; st: = OpenDialog1.FileName;
# XA0; GetShortPathName (@st [1], @st [1], length (st)); # XA0; Label1.Caption: = st;
немає, виглядає як ДО9D77
1.DOC, в підказці при наведенні курсору заголовок файлу ДОГОВІР ПОДРЯДА.DOC.
t100 # XA0; (07.06.04 16:55) [25]
Чого ж ти хочеш, у тебе взагалі немає довгого імені як такого, а курсор показує властивості документа.
Проблема то в тому, що після не коректною установки ОС все імена файлів покаверкалісь на короткі, а хотілося б їх відновити на довгі.
Може видирати з кожного такого вордовского файлу перше речення (певну кількість символів) і перейменовувати ім'я в них?
Ось з цього починати треба було. Зауваж, зовсім інше питання, ніж Субж!
Тобі потрібно взяти ім'я документа і перейменувати файл, давши йому це ім'я.
Так, але тепер, що значить "взяти ім'я документа"?
Дайте тоді може хто посилання, будь ласка, для роботи з документами Word через OLE.
У деяких файлів є властивості. Особливо це відноситься до документів офісу. Якщо в ворде викликати властивості документа, то їх цілком можна побачити. Те ж саме, якщо подивитися властивості файлу. У мене, наприклад, на вкладці "Документ" є поле Назва.
І будь-який з цих властивостей можна дістати, через ActiveX. Багато властивостей зумовлені, наприклад, назва - це PIDSI_TITLE;)
А дістається все це через stgOpenStorage і Юзан IPropertySet
В інеті напевно повно всього з цього питання. Якщо немає - плиз подальші питання в новому топіку в Corba COM
> У деяких файлів є властивості.
> Мене, наприклад, на вкладці "Документ" є поле Назва.
і вони не завжди збігаються, відкрив перший-ліпший doc
ім'я файлу
Неузгодженість даних в чеке.doc
а на вкладці в поле назву
Проблема. # XA0; неузгодженість даних в чеку і базі при паралельній завантаженні
що погодьтеся не одне і теж; о), файл не мій. думаю спочатку збережений в ворде а назва після підкориговано.