Как ПЕРЕИМЕНОВАТЬ файл согласно маске?
Таким вот образом:
abcdef.txt -> ???def.* = abcdef.txt
abcfff.dbf -> ???def.* = abcdef.dbf
теперь обратная задача... Как имеющееся имя файла вогнать в маску?
Таким вот образом:
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.
slava.txt -> theva.txtdef
Это меня особенно поразило. А почему бы не "theslavadef.txt"? Это было бы логичо, если бы алгоритм начинался со сверки масок "*.*" и "the*def.*".
Вот что я только что нашел:
http://www.codenet.ru/progr/alg/24.php
Готовый исходник. Правда, я немного иначе себе его представлял...
Я тут как-то написал (только на словах) как сравнить файл с маской. (Куда топик пропал?)
Вот что я только что нашел:
http://www.codenet.ru/progr/alg/24.php
Готовый исходник. Правда, я немного иначе себе его представлял...
Тред снял я - мне подсказали, что оказывается для сравнения есть функция MatchesMask в masks.hpp
Я чувствовал, что ТАКОЕ ДОЛЖНО БЫТЬ в системе, поскольку маски используются ОЧЕНЬ часто...
Удивительно, что нет системной функции переименования по маске. А может, я просто не знаю?
Удивительно, что нет системной функции переименования по маске. А может, я просто не знаю?
Как-то все слишком запутано с этим делом. Алгоритмы из Виндовс были написаны для ДОС. Они не отличают точку перед расширением файла от других точек в имени файла. Видимо, оставлено как есть для совместимости с ДОС и Win 3.11.
Вот что я заметил: если маска начинается со звездочки, то точка ищется с конца имени файла, если нет, то с начала.
Вот еще один перл:
Команда ren *.* **.dat
Document.txt.htm -> Document.txt.htm.dat
(Здесь в маске дважды повторена звездочка. Результат - расширение .dat не заменило старое расширение, а добавилось в конец имени.) Чудеса!
Ты все еще уверен, что ты хочешь чтобы твоя программа умела делать такие вещи? :)
А нельзя ли так: cmd.exe /C rename маска1 маска2