Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как ПЕРЕИМЕНОВАТЬ файл согласно маске?

270
28 сентября 2003 года
Drew
265 / / 20.07.2000
теперь обратная задача... Как имеющееся имя файла вогнать в маску?

Таким вот образом:

abcdef.txt -> ???def.* = abcdef.txt
abcfff.dbf -> ???def.* = abcdef.dbf
415
29 сентября 2003 года
SLA
274 / / 08.08.2003
Цитата:
Originally posted by Drew
теперь обратная задача... Как имеющееся имя файла вогнать в маску?

Таким вот образом:

abcdef.txt -> ???def.* = abcdef.txt
abcfff.dbf -> ???def.* = abcdef.dbf



Я тут посмотрел как это работает в Windows:

Команда
ren *.* ???def.*

abcfff.txt -> abcdef.txt
zabcfff.txt -> zabdef.txt
n.txt -> ndef.txt
new.text.document.txt -> newdef.text.document.txt
new -> newdef

Команда
ren *.* the??def.*

slava.txt -> thevadef.txt
n.txt -> thedef.txt

Команда
ren *.* the*def.*

slava.txt -> theva.txtdef

Немного неожиданно выглядят результаты. Тут, конечно, есть какая-то логика, но чтобы ее разгадать, придется поломать голову. Ибо ошибок делать здесь нельзя. Т.е. нужно сделать именно КЛОН консольной команды rename. А работает она так (ИМХО странно) оттого, что рассчитана была на работу с именами файлов в ДОС-формате, а потом расширена до Виндовс-формата.

Если хочешь, зайди на http://www.freedos.org/, это сайт "FreeDOS Project" (клон MS-DOS). Он, должно быть, open-source.

415
29 сентября 2003 года
SLA
274 / / 08.08.2003
Цитата:
ren *.* the*def.*

slava.txt -> theva.txtdef



Это меня особенно поразило. А почему бы не "theslavadef.txt"? Это было бы логичо, если бы алгоритм начинался со сверки масок "*.*" и "the*def.*".

415
30 сентября 2003 года
SLA
274 / / 08.08.2003
Я тут как-то написал (только на словах) как сравнить файл с маской. (Куда топик пропал?)

Вот что я только что нашел:

http://www.codenet.ru/progr/alg/24.php

Готовый исходник. Правда, я немного иначе себе его представлял...
270
01 октября 2003 года
Drew
265 / / 20.07.2000
Цитата:
Originally posted by SLA
Я тут как-то написал (только на словах) как сравнить файл с маской. (Куда топик пропал?)

Вот что я только что нашел:

http://www.codenet.ru/progr/alg/24.php

Готовый исходник. Правда, я немного иначе себе его представлял...


Тред снял я - мне подсказали, что оказывается для сравнения есть функция MatchesMask в masks.hpp
Я чувствовал, что ТАКОЕ ДОЛЖНО БЫТЬ в системе, поскольку маски используются ОЧЕНЬ часто...
Удивительно, что нет системной функции переименования по маске. А может, я просто не знаю?

415
01 октября 2003 года
SLA
274 / / 08.08.2003
Цитата:
Originally posted by Drew
Удивительно, что нет системной функции переименования по маске. А может, я просто не знаю?



Как-то все слишком запутано с этим делом. Алгоритмы из Виндовс были написаны для ДОС. Они не отличают точку перед расширением файла от других точек в имени файла. Видимо, оставлено как есть для совместимости с ДОС и Win 3.11.

Вот что я заметил: если маска начинается со звездочки, то точка ищется с конца имени файла, если нет, то с начала.

Вот еще один перл:
Команда ren *.* **.dat
Document.txt.htm -> Document.txt.htm.dat

(Здесь в маске дважды повторена звездочка. Результат - расширение .dat не заменило старое расширение, а добавилось в конец имени.) Чудеса!

Ты все еще уверен, что ты хочешь чтобы твоя программа умела делать такие вещи? :)
А нельзя ли так: cmd.exe /C rename маска1 маска2

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог