![]() |
Модераторы: Poseidon |
![]() ![]() ![]() |
|
Горя |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 24.7.2009 Репутация: нет Всего: нет |
Проблема такая: есть папка, наполненная файлами без расширения.
Нужен цикл, добавляющий всем файлам расширение .htm Файлов много, так что чем быстрее работает, тем лучше. При этом имя файла меняться не должно - только добавляться в конце расширение. Есть идея - осуществить поиск имён файлов в указанной папке, ища любое сочетание символов (как это делается на С++?) и добавлять к этому сочетанию расширение. Как это сделать практически, никаких мыслей ![]() |
|||
|
||||
Gordon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 9.7.2006 Репутация: нет Всего: 6 |
Под Windows, думаю можно использовать функции FindFirsFile, FindNextFile... А искать нужно только в самой директории или еще и вложенные просмотреть нужно?
-------------------- |
|||
|
||||
Gordon |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 9.7.2006 Репутация: нет Всего: 6 |
Вот попробуй, функция без дополнительных проверок. Если найдет хоть один файл (удовлетворяющий условию поиска, в данном случае, как я понял, это "*."), попытается его переименовать, потом ищет следующий файл, пытается переименовать его потом следующий и т.д. Если ни одного файла не найдено, вернет false, но если вернет true - это не значить (на 100%) что найденные файл (файл) переименованы...
Использовать можно так:
т.е. добавить всем файлам без расширения в папке "d:\dir" расширение ".htm". Короче, проверь работу у себя... p.s. Думаю суть тебе понятна. -------------------- |
||||
|
|||||
Горя |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 24.7.2009 Репутация: нет Всего: нет |
error C2601: 'AddExtention' : local function definitions are illegal
Ругается на первую строчку после bool, то есть просто на фигурную скобку. Никаких библиотек, кроме иострима не надо? ![]() |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 9 Всего: 211 |
||||
|
||||
Gordon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 9.7.2006 Репутация: нет Всего: 6 |
Горя, ты походу просто функцию AddExtention "вставил" в какую-то другую, в main, например... Сделай её глобальной! -------------------- |
|||
|
||||
alexcoder |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 21.6.2009 Репутация: нет Всего: нет |
Не люби мозги. Если нужен результат, используй total commander.
Выдели файлы нажми ctrl-M либо в меню файл-групповое переименование во втором слева-сверху текстовом окошке ("Маска для расширения") набери html нажми кнопку "выполнить" все! |
|||
|
||||
Горя |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 24.7.2009 Репутация: нет Всего: нет |
alexcoder, ага, и так делать каждый день, когда робот выкачивает файлы? Каждый день приходить к заказчику, говорить "Привет, тут я вам программку сделал, дайте-ка я ей подсоблю", и садиться переименовывать. Этапять, чувак
![]() Gordon, пробовал, выдавало 26 ошибок ![]() Сейчас библиотечку добавлю, вдруг, запашет. ... Так. Компилится без проблем. Билд не выполняет, еррор (unresolved external symbol _WinMain@16) и фатал еррор, 1 unresolved externals. Не понял, он что, вообще в паре с мейном работать не хочет? о.О Это сообщение отредактировал(а) Горя - 31.7.2009, 15:24 |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 9 Всего: 211 |
адресатом не ошибся? Это сообщение отредактировал(а) azesmcar - 31.7.2009, 14:19 |
|||
|
||||
Горя |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 24.7.2009 Репутация: нет Всего: нет |
azesmcar, ошибся, извините. Вам спасибо, прошлые ошибки исчезли. Правда, новые появились
![]() |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 9 Всего: 211 |
||||
|
||||
Горя |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 24.7.2009 Репутация: нет Всего: нет |
||||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 9 Всего: 211 |
замени WinMain на int main() { ... }
|
|||
|
||||
Горя |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 24.7.2009 Репутация: нет Всего: нет |
Не, ну я не совсем лох.
Приложение консольное. |
|||
|
||||
azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 9 Всего: 211 |
Тьфу...спутал.как раз наоборот
![]() main замени на
или
в зависимости от настройки проекта (юникод/не юникод). Это сообщение отредактировал(а) azesmcar - 31.7.2009, 19:33 |
||||
|
|||||
Gordon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 9.7.2006 Репутация: нет Всего: 6 |
Горя, вот мой код в VS 2008:
Все компилируется пез проблем! ))) -------------------- |
|||
|
||||
Горя |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 24.7.2009 Репутация: нет Всего: нет |
Gordon, эм... Остальная часть программы сделана через инт мейн ()... Нельзя ли что-нибудь с этим сделать?
Если тупо убрать из данной программы всё, на что ругается компилятор, она попросту не работает ![]() А, да. Стыдно говорить, у меня VC++ 6,5 |
|||
|
||||
Gordon |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 9.7.2006 Репутация: нет Всего: 6 |
честно говоря, не совсем понял... Что с чем сделать? Сейчас я попставлю VC 6 и там попробую собрать... Добавлено через 13 минут и 14 секунд вот код, vc 6.0 воспринимает нормально:
-------------------- |
||||
|
|||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 9 Всего: 211 |
Gordon
Я написал причину на предыдущей странице. Он создает Win32 приложение, а там функция main должна быть описана как WinMain, выдается ошибка линкера, в ней все сказано. |
|||
|
||||
Gordon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 9.7.2006 Репутация: нет Всего: 6 |
Ну да. Только я думал ему нужно консольное приложение... -------------------- |
|||
|
||||
Горя |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 24.7.2009 Репутация: нет Всего: нет |
azesmcar, да, вин32 консоль. Какой вин мейн?
Gordon, вроде, он и надо... |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 9 Всего: 211 |
На предыдущей странице написано. Да, странно что для консоли он WinMain требует, наверное настройки проекта изменены, по умолчанию не должен. |
|||
|
||||
Gordon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 9.7.2006 Репутация: нет Всего: 6 |
Горя, может стоит заново создать проект и туда вставить код из старого...
-------------------- |
|||
|
||||
Горя |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 24.7.2009 Репутация: нет Всего: нет |
Сделал новый проект. Всё равно не уверен, будет ли восприниматься в _tmain то, что работало в main ^^
|
|||
|
||||
Gordon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 9.7.2006 Репутация: нет Всего: 6 |
Горя, а у тебя VC 6 создает файл с _tmain? _tmain - это, вроде, юникодовый вариант main, а тебе, кажется, нужно было определиться с выбором main или WinMain...
-------------------- |
|||
|
||||
Горя |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 24.7.2009 Репутация: нет Всего: нет |
Нет, у меня никто ничего не создаёт
![]() И нету файла заголовника stdafx, его тоже не создаёт. Создаю я пустой проект, консольное приложение. Там ничего нет вообще, даже сипипиську надо создавать. |
|||
|
||||
Горя |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 24.7.2009 Репутация: нет Всего: нет |
Нифига не понимаю. Компилятор ругается на _TCHAR. error C2061: syntax error : identifier '_TCHAR'
|
|||
|
||||
Горя |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 24.7.2009 Репутация: нет Всего: нет |
Заработало, вот в таком виде:
Переименовал некоторые (!) файлы. В том числе один тхтшник ![]() Но это плевать, главное, что некоторые файлы без расширения расширил. PS: переименовал 131 из 530 файлов. Это сообщение отредактировал(а) Горя - 2.8.2009, 20:37 |
|||
|
||||
Gordon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 9.7.2006 Репутация: нет Всего: 6 |
У меня тхтшники не переименовывает... А все (530) файлов "находятся"? Можно сделать следующее: если MoveFile завершается неудачей, вызвать GetLastError() чтобы получить информацию об ошибке... А там уже смотреть, почему происходит ошибка. -------------------- |
|||
|
||||
Горя |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 24.7.2009 Репутация: нет Всего: нет |
Gordon, был тхтшник log.txt, стал log.txt.htm
Нету больше ошибок. |
|||
|
||||
Gordon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 9.7.2006 Репутация: нет Всего: 6 |
Т.е. нету? Компилятор не выдает или работает без ошибок? Все файлы переименовывает? -------------------- |
|||
|
||||
Горя |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 24.7.2009 Репутация: нет Всего: нет |
При компиляции и постройке никаких ошибок не выдаёт. Переименовывает только часть.
|
|||
|
||||
Gordon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 9.7.2006 Репутация: нет Всего: 6 |
Может быть, файлы с такими именами уже есть в директории? Т.е. есть файлы "1" и "1.htm", тогда переименование не произойдет. -------------------- |
|||
|
||||
Горя |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 24.7.2009 Репутация: нет Всего: нет |
Gordon, да нет, у меня ж не может там уже быть двух одинаковых файлов. При переименовании же имя никак не меняется, только добавляется .хтм. Нет, у меня папка полна файлов без расширения, естественно, с уникальными именами, и никаких больше там файлов нет.
|
|||
|
||||
Gordon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 9.7.2006 Репутация: нет Всего: 6 |
Горя, а чем файлы, которые не переименовываются, "отличаются" от тех, которые переименовываются... Может они заняты другим приложением?
-------------------- |
|||
|
||||
Горя |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 24.7.2009 Репутация: нет Всего: нет |
Суть такая: пользуя вгет качаю форум. На форуме страницы все в хтмле. Вгет сохраняет их как viewtopic.php@pid=***, вместо звёздочек - трёхзначное число. И таких вьютопиков пятьсот с лишком штук, но все без нормального расширения оказываются (проблемы с хостом).
То есть файлы все совершенно одинаковые, и их имена разнятся лишь на последние три цифры. |
|||
|
||||
Gordon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 9.7.2006 Репутация: нет Всего: 6 |
Горя, ну попробуй вставить в код проверку на ошибки при переименовании и посмотри почуму ошибка...
p.s. честно говоря, не знаю, может MoveFileEx поможет? -------------------- |
|||
|
||||
Горя |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 24.7.2009 Репутация: нет Всего: нет |
Стыдно спрашивать, но как её вставить?
![]() |
|||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 16 Всего: 69 |
||||
|
||||
Горя |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 24.7.2009 Репутация: нет Всего: нет |
zim22,
![]() Только, прикиньте, ничего не вставляется. |
|||
|
||||
Gordon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 9.7.2006 Репутация: нет Всего: 6 |
Если возвращенное MoveFile значение не "true" тогда вызвать функцию GetLastError() для получения кода ошибки (может он что подскажет)...
-------------------- |
|||
|
||||
Gordon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 9.7.2006 Репутация: нет Всего: 6 |
Можно примерно так написать:
Можно еще использовать функцию "FormatMessage", а можно посмотреть описание ошибок тут, вроде те... -------------------- |
|||
|
||||
Mad |
|
||||
Опытный ![]() ![]() Профиль Группа: Эксперт Сообщений: 656 Регистрация: 18.10.2004 Где: Одесса Репутация: 1 Всего: 19 |
Вот это должно работать с любыми настройками (Юнткод, Мультибайт и обычный) :
Использовать так :
|
||||
|
|||||
Горя |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 24.7.2009 Репутация: нет Всего: нет |
Mad, попробую.
... Вот получилось: error C2065: '_stprintf_s' : undeclared identifier Gordon, во, оказывается, чтобы ваша программа у меня работала, нужен tchar.h. Данный вами кусок работует, но не выдаёт никаких ошибок. Программка срабатывает, выпадает обычный чёрный экран и Press any key to continue. Добавлено через 11 минут и 41 секунду PS: хм. Вложенные папки тоже переименовал. Причём два раза (папка.htm.htm). Это сообщение отредактировал(а) Горя - 6.8.2009, 20:06 |
|||
|
||||
Mad |
|
|||
Опытный ![]() ![]() Профиль Группа: Эксперт Сообщений: 656 Регистрация: 18.10.2004 Где: Одесса Репутация: 1 Всего: 19 |
[quote=Горя, 6.8.2009, 19:03, post1937478]Вот получилось: error C2065: '_stprintf_s' : undeclared identifier[/quoe]
для VS < v9.0 убери "_s", при этом будет нормально компилиться и в 9.0 но с warning :
|
|||
|
||||
Gordon |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 9.7.2006 Репутация: нет Всего: 6 |
Там было два варианта, для VS 2008 (т.е. 9 версии) и для VC++ 6.0...
Да, папки переименовывает (плохо, что файлы без расширения)... Но у меня только один раз... ![]() -------------------- |
||||
|
|||||
Горя |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 24.7.2009 Репутация: нет Всего: нет |
Gordon, да ладно, с папок не убудет, плевать.
Mad, ваша вообще никак не работает. Ничего не переименовывает. Добавлено через 3 минуты и 7 секунд Gordon, удалил уже переименованные файлы, запустил заново. Папки переименовались снова Оо Кстати, нашёл, чем они отличаются. Переименованные файлы были с именем viewtopic.php@pid=***, а те, что не переименовываются - viewtopic.php@pid=***. |
|||
|
||||
Mad |
|
||||
Опытный ![]() ![]() Профиль Группа: Эксперт Сообщений: 656 Регистрация: 18.10.2004 Где: Одесса Репутация: 1 Всего: 19 |
конечно, ведь реч шла о файлах без расширения, а теперь о в денном случае расширение этих файлов "php@pid=***" (расширением файла считаеться любой набор символов после последней точки в имени файла). В вашем конкретном случае надо заменить условие
на более сложное. которое будет проверять имеет файл расширение html или нет (а не имеет расширение вообще. как сейчас)
Не стоит забывать, что функции сравнения строк чуствительны к регисту (т.е это условие не позволит переименновать файл с расширением .html, но переиминует .HTML и друоие вариации). |
||||
|
|||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 16 Всего: 69 |
перед сравнением строк можно привести их к одному регистру. Это сообщение отредактировал(а) zim22 - 7.8.2009, 07:49 |
|||
|
||||
Gordon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 9.7.2006 Репутация: нет Всего: 6 |
что-то я разницу не усмотрел... ![]() Добавлено через 4 минуты и 19 секунд Горя, а в каталоге только файлы без расширения, или еще какие есть? -------------------- |
|||
|
||||
Горя |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 24.7.2009 Репутация: нет Всего: нет |
||||
|
||||
Gordon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 9.7.2006 Репутация: нет Всего: 6 |
Ошибся, когда на тут писал, или в наличии различий в именах? -------------------- |
|||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 16 Всего: 69 |
Горя, не лучше ли использовать готовое ПО? Какой-нибудь renamer c поддержкой регулярных выражений подойдёт.
|
|||
|
||||
Dov |
|
|||
![]() аСинизатор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1721 Регистрация: 10.5.2003 Где: Эрец-Исраэль Репутация: 50 Всего: 88 |
для этих целей нужно юзать _tcsicmp и ей подобные. -------------------- Тут вечности запах томительный, И свежие фрукты дешевые, А климат у нас – изумительный, И только соседи – #уевые. Игорь Губерман. |
|||
|
||||
Горя |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 24.7.2009 Репутация: нет Всего: нет |
Mad, пофиг на регистр, всё прописью.
Gordon, в наличии разниц в именах. zim22, некуртуазно ![]() |
|||
|
||||
Gordon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 9.7.2006 Репутация: нет Всего: 6 |
Горя, так ты на чем остановился?
-------------------- |
|||
|
||||
Горя |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 24.7.2009 Репутация: нет Всего: нет |
Mad, ваша программа не работает в таком виде:
Отличия от исходного кода на прошлой странице: 1) из _stprintf_s убрана вторая _s (методом научного тыка, tprintf и tprintf_s тоже вызывают ошибку). Если заменить _stprintf_s (_stprintf в вышеуказанном коде), то переименовываются только папки. 2) заменён if(!_tcschr(dt.cFileName, '.')) на выложенный вами. Gordon, ваш код тоже переименовывает только папки.
|
||||
|
|||||
Gordon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 9.7.2006 Репутация: нет Всего: 6 |
Горя, если у тебя все файлы, которые нужно переименовать, заканчиваются на "*.php@pid=****", тогда можно так написать:
p.s. ты еще не совсем правильно код написал, после "return true;" ничего выполняться не будет... Это сообщение отредактировал(а) Gordon - 4.9.2009, 18:51 -------------------- |
|||
|
||||
Горя |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 24.7.2009 Репутация: нет Всего: нет |
Всё заработало, огромное мерси всем участникам.
|
|||
|
||||
Gordon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 9.7.2006 Репутация: нет Всего: 6 |
-------------------- |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Центр помощи" | |
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Центр помощи | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |