FileTitle и FileName

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Diamock
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 389
Зарегистрирован: 26.10.2009 (Пн) 4:19
Откуда: Кемерово

FileTitle и FileName

Сообщение Diamock » 14.02.2010 (Вс) 10:12

Здравствуйте Уважаемые!
Возник вопрос следующего плана.
При использовании CommonDialog, не составляет проблемы получить FileName и FileTitle.
Но в своей программе, я не использую CommonDialog.
FileName, я получаю с помощью рекурсивного поиска.
Подскажите, есть способ получить FileTitle из FileName, или придётся парсить самому?
С уважением...
In der Beschrankung zeigt sich erst der Meister
Графоманю...

fast
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 10.06.2009 (Ср) 10:24

Re: FileTitle и FileName

Сообщение fast » 14.02.2010 (Вс) 16:00

Считывай имя файла (FileName) до первой точки - получишь FileTitle
алгоритм не сложный:

File_Title = Left(File_Name, InStr(1, File_Name, ".", vbBinaryCompare) - 1)

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Re: FileTitle и FileName

Сообщение BV » 14.02.2010 (Вс) 17:45

Алгоритм неправильный. В названии файла может быть сколько угодно точек, и только последняя отделяет имя от расширения. А стало быть, InStrRev
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

fast
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 10.06.2009 (Ср) 10:24

Re: FileTitle и FileName

Сообщение fast » 14.02.2010 (Вс) 17:51

Отчасти Вы правы... тут уж по месту нужно смотреть, можно и с конца считать, только вот суть от этого не меняется! Алгоритм верный! все зависит от запроса...

К тому же корректные имена файлов не должны содержать более одной "точки", хотя современные файловые системы это и позволяют.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16489
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: FileTitle и FileName

Сообщение Хакер » 14.02.2010 (Вс) 18:30

fast, не пиши глупости.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

fast
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 10.06.2009 (Ср) 10:24

Re: FileTitle и FileName

Сообщение fast » 14.02.2010 (Вс) 20:34

Почему же глупости?
Я хотя бы ответил человку на вопрос... в отличии от некоторых...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16489
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: FileTitle и FileName

Сообщение Хакер » 14.02.2010 (Вс) 20:35

Лучше молчать, чем писать бред.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

fast
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 10.06.2009 (Ср) 10:24

Re: FileTitle и FileName

Сообщение fast » 14.02.2010 (Вс) 22:36

Ну так сделай милость... :wink:

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16489
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: FileTitle и FileName

Сообщение Хакер » 14.02.2010 (Вс) 22:38

Бред пишешь ты. В случае, если ты продолжишь браво писать бред или писать такие посты, содержимое которых «отражает» мои призывы не писать бред на меня же самого (или аналогично, но в отношении любого другого участника), ты получаешь наказание.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: FileTitle и FileName

Сообщение Денис » 15.02.2010 (Пн) 9:46

С помощью split ("\") Автор получает массив, крайний элемент которого (Ubound), дает ему имя файла. Восстановление пути из всех элементов массива минус крайний дают Автору путь к файлу.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: FileTitle и FileName

Сообщение alibek » 15.02.2010 (Пн) 9:54

Денис писал(а):С помощью split ("\") Автор получает массив, крайний элемент которого (Ubound), дает ему имя файла. Восстановление пути из всех элементов массива минус крайний дают Автору путь к файлу.

Зачем советовать кривой метод, если уже был озвучен нормальный?
Lasciate ogni speranza, voi ch'entrate.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: FileTitle и FileName

Сообщение Денис » 15.02.2010 (Пн) 10:41

alibek писал(а):Зачем советовать кривой метод, если уже был озвучен нормальный?


Извините.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: FileTitle и FileName

Сообщение SLIM » 15.02.2010 (Пн) 22:16

BV писал(а):Алгоритм неправильный. В названии файла может быть сколько угодно точек, и только последняя отделяет имя от расширения. А стало быть, InStrRev

Вот так вот я как-то парсил пути, парсил, пока не нарвался на папку с точкой в наименовании, и нарвался )))

С тех пор всегда проверяю на точку после последнего "\" и последней "."
Винда не даст в наименование поставить "\" как бы не старался, стало быть InstrRev по "\" и InstrRev по "." )))
Пишите жизнь на чистовик.....переписать не удастся.....

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: FileTitle и FileName

Сообщение jangle » 15.02.2010 (Пн) 22:30

BV писал(а):Алгоритм неправильный. В названии файла может быть сколько угодно точек, и только последняя отделяет имя от расширения. А стало быть, InStrRev


И предпоследняя точка тоже отделяет, например: "test.tar.bz2" и "test.bz2" это разный формат архивов, которые архиваторы открывают по разному.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: FileTitle и FileName

Сообщение alibek » 15.02.2010 (Пн) 22:36

jangle писал(а):И предпоследняя точка тоже отделяет, например: "test.tar.bz2" и "test.bz2" это разный формат архивов, которые архиваторы открывают по разному.

Ерунду не говори.
Lasciate ogni speranza, voi ch'entrate.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: FileTitle и FileName

Сообщение jangle » 15.02.2010 (Пн) 22:38

alibek писал(а):Ерунду не говори.


В чем ты ерунду увидел?

"test.tar.bz2" - содержит внутри архива, описание формата битового потока tar. Который позволяет хранить сколько угодно файлов внутри и иерархическую структуру папок. Когда открываешь такой архив в любом архиваторе, он автоматически покажет содержимое в виде дерева папок. tar + bzip2

"test.bz2" - может хранить только один файл, голый bzip2 реализующий BWT компрессию.

Соответственно если переименовать test.tar.bz2 в test.bz2, при открытии в WinRar никакой структуры папок уже не увидишь, и не сможешь его распаковать.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16489
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: FileTitle и FileName

Сообщение Хакер » 15.02.2010 (Пн) 23:14

Поясню. SLIM имел в виду файл c:\vbstreets.ru\flatfile.

Если мысль: прежде чем смотреть на «последнюю точку», отрежьте путь. Иначе получите «ru\flatfile» в качестве расширения.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: FileTitle и FileName

Сообщение Andrey Fedorov » 16.02.2010 (Вт) 0:04

Но самое главное - никто из отвечающих не подумал, что же за FileTitle нужно человеку.

Говорят о пути, имени, расширениях, а человеку ведь нужно всего-навсего FileTitle...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16489
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: FileTitle и FileName

Сообщение Хакер » 16.02.2010 (Вт) 0:50

Человек сам сказал, ему нужно FileTitle такое же, какое выдаёт Common Dialog. И вобщем-то понятно, что полный аналог не получить, потому что у CD есть фильтр, и он использует фильтр как хинт, а в данном случае ничего такого нет.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: FileTitle и FileName

Сообщение iGrok » 16.02.2010 (Вт) 2:56

jangle писал(а):...и не сможешь его распаковать.

Чушь. При открытии в винрар ты увидишь только один файл. Так сказать, распакованный "поток". Если попробовать нажать на нём "Просмотр" в том же винраре - ты увидишь содержимое оригинального архива.

Наличие расширения только помогает определить, что внутри. Но и его отсутствие ничуть не мешает.

А всё дело в том, что архиватор bzip2 может только сжимать и только один файл. Поэтому имя оригинального файла он "хранит" в имени сжатого вот таким вот простым и гениальным образом. В итоге, изменив расширение архива таким образом ты просто убиваешь расширение у оригинального файла. Поэтому винрар его автоматом сходу и не опознаёт.
label:
cli
jmp label

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: FileTitle и FileName

Сообщение jangle » 16.02.2010 (Вт) 10:26

iGrok писал(а):
jangle писал(а):...и не сможешь его распаковать.

Чушь. При открытии в винрар ты увидишь только один файл. Так сказать, распакованный "поток". Если попробовать нажать на нём "Просмотр" в том же винраре - ты увидишь содержимое оригинального архива.


Если откроешь .bz2 файл то увидишь tar в виде файла, если .tar.bz2 то сразу отображается структуру папок. Запусти наконец WinRar и убедись в этом своими глазами.


Наличие расширения только помогает определить, что внутри. Но и его отсутствие ничуть не мешает.


Кому не мешает? Обычному пользователю который не разбирается в форматах архивов? Без расширения .tar он после распаковки получит .tar файл, а не папки и файлы как он привык.

А всё дело в том, что архиватор bzip2 может только сжимать и только один файл. Поэтому имя оригинального файла он "хранит" в имени сжатого вот таким вот простым и гениальным образом. В итоге, изменив расширение архива таким образом ты просто убиваешь расширение у оригинального файла. Поэтому винрар его автоматом сходу и не опознаёт.


bzip2 - это контейнер, который может хранить что угодно, второе расширение показывает его содержимое и механизм его дальнейшей обработки.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: FileTitle и FileName

Сообщение alibek » 16.02.2010 (Вт) 11:24

jangle писал(а):Запусти наконец WinRar и убедись в этом своими глазами.

А в двухпанельном файловом менеджере у тебя будет два диска C: потому что ты видишь их на обеих панелях?
То что WinRar для удобства пользователей распаковывает не только архив, но и тарбол, не должно отменять работу мозга.
Lasciate ogni speranza, voi ch'entrate.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: FileTitle и FileName

Сообщение jangle » 16.02.2010 (Вт) 12:32

alibek писал(а):То что WinRar для удобства пользователей распаковывает не только архив, но и тарбол, не должно отменять работу мозга.


У пользователей, мозг не должен работать в этой ситуации, на это есть программисты, если пользователь вынужден включать мозг - программа плохая.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: FileTitle и FileName

Сообщение alibek » 16.02.2010 (Вт) 14:11

Поэтому пользователи с отключенным мозгом думают, что test.tar.bz2 и test.bz2 — это разные виды архивов.
Lasciate ogni speranza, voi ch'entrate.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: FileTitle и FileName

Сообщение iGrok » 16.02.2010 (Вт) 14:27

Jangle, да хватит уже. Сморозил фигню, так признай это и успокойся.
jangle писал(а):..."test.tar.bz2" и "test.bz2" это разный формат архивов, которые архиваторы открывают по разному.

Это ОДИНАКОВЫЙ формат архива. bz2.

Просто внутри первого лежит файлик "test.tar", а внутри второго - "test".
И открывает их архиватор одинаково. Просто когда архиватор открывает первый, и видит внутри файл "знакомого" формата, он открывает сразу же и его.
label:
cli
jmp label

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: FileTitle и FileName

Сообщение jangle » 16.02.2010 (Вт) 15:10

iGrok писал(а):Jangle, да хватит уже. Сморозил фигню, так признай это и успокойся.
Это ОДИНАКОВЫЙ формат архива. bz2.


Не одинаковый. Попробуй распаковать tar.bz2 файл используя только bzip2. Не получится, нужен еще tar-распаковщик.

И открывает их архиватор одинаково.


Нет, WinRAR и прочие архиваторы ориентируется по расширению и tar.bz2 и bz2 открывают по-разному.

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Re: FileTitle и FileName

Сообщение Twister » 16.02.2010 (Вт) 15:13

и tar.bz2 и bz2 открывают по-разному.
Но ФОРМАТ (содержимое) от этого не изменится.

... Упертость это хорошо, но только в меру ;)
А я все практикую лечение травами...

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: FileTitle и FileName

Сообщение jangle » 16.02.2010 (Вт) 16:08

Twister писал(а):... Упертость это хорошо, но только в меру ;)


Просто у нас разный взгляд на проблему. Ты смотришь на нее с точки зрения профессионала-программиста, я с точки зрения тупого и ленивого пользователя, который обязательно сделает неправильно все, что только можно сделать неправильно. Если он не увидит данные из-за ошибочного расширения файла, то он объяснить шефу, что ему прислали испорченные данные, и поэтому он ничего не делал на своем рабочем месте - ведь это "тупая" программа виновата... :wink:

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: FileTitle и FileName

Сообщение iGrok » 16.02.2010 (Вт) 19:32

jangle писал(а):Не одинаковый. Попробуй распаковать tar.bz2 файл используя только bzip2. Не получится, нужен еще tar-распаковщик.

Если я упакую файл раром, а потом упакую его в зип, то этот зип будет чем-то отличаться от любого другого зипа? Это будет другой формат архива?

А если я упакую файл раром, поменяю ему расширение на пустое, и запакую в зип?

Последее - равнозначно переименованию .tar.bz2 в просто .bz2

Признай уже наконец, что пример, основанный на необычной особенности работы(хранить имена упакованных файлов в имени архива) ОДНОЙ программы (bzip2) в применении к расширениям файлов вообще - абсолютно некорректен.
label:
cli
jmp label

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Re: FileTitle и FileName

Сообщение BV » 18.02.2010 (Чт) 14:12

О чем вообще спор? Определение из MSDN:
MSDN писал(а):A file extension is the part of a file name that comes after the final period

Все остальное -- особенности работы той или иной программы
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

След.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 16

    TopList