Форум: "Основная";
Текущий архив: 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