C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Имя файла исходя из маски
gvg
Отправлено: 05.12.2006, 09:28


Машинист паровоза

Группа: Участник
Сообщений: 222



Кто знает, есть ли функция, позволяющая получить имя исходя из исходного имени и маски. Например, по команде:
copy 12345678.abc ??90.?
получаем файл 1290.a
Как получить новое имя в программе? Поискал, что-то не нашел...
AVC
Отправлено: 05.12.2006, 10:16


Ветеран

Группа: Модератор
Сообщений: 1583



Новое в смысле сгенерировать такое имя, которого нет в целевом каталоге? Перебор и проверка.
gvg
Отправлено: 05.12.2006, 10:25


Машинист паровоза

Группа: Участник
Сообщений: 222



Да нет, получить имя по указанным правилам... Ни хрена ничего не нахожу по этой теме вообще, кроме TMask и MatchedMask. Но это не то sad.gif
Grigoriy
Отправлено: 06.12.2006, 03:30


Мастер участка

Группа: Участник
Сообщений: 381



Дружище, какие правила нужны ?
Их можно придумать неограниченное количество...
gvg
Отправлено: 06.12.2006, 10:59


Машинист паровоза

Группа: Участник
Сообщений: 222



Придумать можно что угодно, это верно. Но есть правила подстановки символов '*' и '?' для именования файлов, уже придуманные и реализованные в операционной системе. А вот функции, позволяющей воспользоваться этими правилами, увы, вроде как и нет...
olegenty
Отправлено: 06.12.2006, 15:00


Ветеран

Группа: Модератор
Сообщений: 2412



RTFM
FindFirstFile, FindNextFile, FindClose
gvg
Отправлено: 06.12.2006, 17:25


Машинист паровоза

Группа: Участник
Сообщений: 222



QUOTE (olegenty @ 06.12.2006, 15:00)
RTFM
FindFirstFile, FindNextFile, FindClose

Вы прочитали вопрос? Мне файл не нужно искать по маске. Его нет. Мне его по маске записать нужно исходя из имеющегося имени.
Имеем:
имя 12345678.abc
маска ??90.?
получаем 1290.a
Вопрос — а чем это получить?
olegenty
Отправлено: 06.12.2006, 17:42


Ветеран

Группа: Модератор
Сообщений: 2412



пока не понял, почему ты получил именно 1290.а, а, например, не 0090.0?

в любом случае, сначала ты проверяешь по маске, что имеешь, а потом, если ничего не имеешь, исходя из СОБСТВЕННЫХ правил генерируешь имя, например, применяя посимвольный инкремент.
gvg
Отправлено: 06.12.2006, 17:54


Машинист паровоза

Группа: Участник
Сообщений: 222



QUOTE (olegenty @ 06.12.2006, 17:42)
пока не понял, почему ты получил именно 1290.а, а, например, не 0090.0?

в любом случае, сначала ты проверяешь по маске, что имеешь, а потом, если ничего не имеешь, исходя из СОБСТВЕННЫХ правил генерируешь имя, например, применяя посимвольный инкремент.

Получил по правилам ОС. Выполни команду в командной строке

copy 12345678.abc ??90.?

и получишь результат (при условии что 12345678.abc существует). И СОБСТВЕННЫХ правил мне не нужно. Нужна функция, следующая правилам ОС. А пока вижу, что не многие теперь знают про само существование этих правил smile.gif
AVC
Отправлено: 06.12.2006, 18:35


Ветеран

Группа: Модератор
Сообщений: 1583



QUOTE

А пока вижу, что не многие теперь знают про само существование этих правил

Тут вы заблуждаетесь. Просто за то время что вы ищите готовые функции (я их тоже не встречал, правда и не искал) можно написать нужную именно вам их реализацию. smile.gif
gvg
Отправлено: 06.12.2006, 20:03


Машинист паровоза

Группа: Участник
Сообщений: 222



QUOTE
Тут вы заблуждаетесь.
Сужу по ответам...
QUOTE
Просто за то время что вы ищите готовые функции (я их тоже не встречал, правда и не искал) можно написать нужную именно вам их реализацию.
Старый, наверное, стал — лень заела. Но, по-всей видимости, придется. Тем более, хотя этот вопрос поднимался другими на многих форумах, никто ответа не дал. Нет такой функции — вот что странно! (вроде под Линукс есть, но исходников не нашел)
AVC
Отправлено: 07.12.2006, 09:12


Ветеран

Группа: Модератор
Сообщений: 1583



QUOTE (gvg @ 06.12.2006, 19:03)
вроде под Линукс есть, но исходников не нашел

Я видел реализацию в системе имитации новеловской сети на линуксе, кажется называется марс. Это около 20 срок кода которые проверяют подходит ли текущая строка под маску. Применялась при необходимости обрабатывать группу файлов по маске. Из за различных кодировок русского в новеле и линуксе именно этот кусок порождал ошибки.
К сожалению найти у себя не смог — исходник затерялся на просторах локальной сети. smile.gif

Вернуться в Вопросы программирования в C++Builder