Модераторы: Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [С++] Поиск в имени файлов, Нужна автозамена 
:(
    Опции темы
Горя
Дата 28.7.2009, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 24.7.2009

Репутация: нет
Всего: нет



Проблема такая: есть папка, наполненная файлами без расширения.
Нужен цикл, добавляющий всем файлам расширение .htm
Файлов много, так что чем быстрее работает, тем лучше. При этом имя файла меняться не должно - только добавляться в конце расширение.

Есть идея - осуществить поиск имён файлов в указанной папке, ища любое сочетание символов (как это делается на С++?) и добавлять к этому сочетанию расширение.
Как это сделать практически, никаких мыслей smile 
PM MAIL   Вверх
Gordon
Дата 28.7.2009, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 9.7.2006

Репутация: нет
Всего: 6



Под Windows, думаю можно использовать функции FindFirsFile, FindNextFile... А искать нужно только в самой директории или еще и вложенные просмотреть нужно?


--------------------

  
     
PM MAIL WWW   Вверх
Gordon
Дата 29.7.2009, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 9.7.2006

Репутация: нет
Всего: 6



Вот попробуй, функция без дополнительных проверок. Если найдет хоть один файл (удовлетворяющий условию поиска, в данном случае, как я понял, это "*."), попытается его переименовать, потом ищет следующий файл, пытается переименовать его потом следующий и т.д. Если ни одного файла не найдено, вернет false, но если вернет true - это не значить (на 100%) что найденные файл (файл) переименованы...
Код

bool AddExtention(std::string dir, std::string ext)
{
    WIN32_FIND_DATAA file;    
    HANDLE hFile = FindFirstFileA(std::string(dir).append("\\*.").c_str(), &file);
    if(hFile == INVALID_HANDLE_VALUE)
    {
        return false;
    }

    do
    {
        MoveFileA(std::string(dir).append("\\").append(file.cFileName).c_str(), 
            std::string(dir).append("\\").append(file.cFileName).append(ext).c_str());
    }while(FindNextFileA(hFile, &file));

    FindClose(hFile);

        return true;
}


Использовать можно так:

Код

AddExtention("d:\\dir", ".htm");

т.е. добавить всем файлам без расширения в папке "d:\dir" расширение ".htm".
Короче, проверь работу у себя...

p.s. Думаю суть тебе понятна.


--------------------

  
     
PM MAIL WWW   Вверх
Горя
Дата 30.7.2009, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 24.7.2009

Репутация: нет
Всего: нет



error C2601: 'AddExtention' : local function definitions are illegal

Ругается на первую строчку после bool, то есть просто на фигурную скобку.
Никаких библиотек, кроме иострима не надо? smile 
PM MAIL   Вверх
azesmcar
Дата 30.7.2009, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 9
Всего: 211



Цитата(Горя @  30.7.2009,  14:59 Найти цитируемый пост)
Никаких библиотек, кроме иострима не надо? 

Код

#include <string>
#include "windows.h"


а iostream зачем?
PM   Вверх
Gordon
Дата 30.7.2009, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 9.7.2006

Репутация: нет
Всего: 6



Цитата(Горя @  30.7.2009,  15:59 Найти цитируемый пост)
error C2601: 'AddExtention' : local function definitions are illegal


Горя, ты походу просто функцию AddExtention "вставил" в какую-то другую, в main, например... Сделай её глобальной!




--------------------

  
     
PM MAIL WWW   Вверх
alexcoder
Дата 30.7.2009, 15:52 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 21.6.2009

Репутация: нет
Всего: нет



Не люби мозги. Если нужен результат, используй total commander.
Выдели файлы
нажми ctrl-M либо в меню файл-групповое переименование
во втором слева-сверху текстовом окошке ("Маска для расширения") набери html
нажми кнопку "выполнить"
все!
PM MAIL   Вверх
Горя
Дата 31.7.2009, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 24.7.2009

Репутация: нет
Всего: нет



alexcoder, ага, и так делать каждый день, когда робот выкачивает файлы? Каждый день приходить к заказчику, говорить "Привет, тут я вам программку сделал, дайте-ка я ей подсоблю", и садиться переименовывать. Этапять, чувак smile 


Gordon, пробовал, выдавало 26 ошибок smile 
Сейчас библиотечку добавлю, вдруг, запашет.
...
Так. Компилится без проблем. Билд не выполняет, еррор (unresolved external symbol _WinMain@16) и фатал еррор, 1 unresolved externals.

Не понял, он что, вообще в паре с мейном работать не хочет? о.О

Это сообщение отредактировал(а) Горя - 31.7.2009, 15:24
PM MAIL   Вверх
azesmcar
Дата 31.7.2009, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 9
Всего: 211



Цитата(Горя @  31.7.2009,  14:05 Найти цитируемый пост)
azesmcar, ага, и так делать каждый день, когда робот выкачивает файлы? Каждый день приходить к заказчику, говорить "Привет, тут я вам программку сделал, дайте-ка я ей подсоблю", и садиться переименовывать. Этапять, чувак smile 

адресатом не ошибся?

Это сообщение отредактировал(а) azesmcar - 31.7.2009, 14:19
PM   Вверх
Горя
Дата 31.7.2009, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 24.7.2009

Репутация: нет
Всего: нет



azesmcar, ошибся, извините. Вам спасибо, прошлые ошибки исчезли. Правда, новые появились  smile 
PM MAIL   Вверх
azesmcar
Дата 31.7.2009, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 9
Всего: 211



Цитата(Горя @  31.7.2009,  15:23 Найти цитируемый пост)
прошлые ошибки исчезли. Правда, новые появились  

Ну показывайте что у вас там, разберемся.

Это сообщение отредактировал(а) azesmcar - 31.7.2009, 15:29
PM   Вверх
Горя
Дата 31.7.2009, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 24.7.2009

Репутация: нет
Всего: нет



Цитата(Горя @  31.7.2009,  14:05 Найти цитируемый пост)
Так. Компилится без проблем. Билд не выполняет, еррор (unresolved external symbol _WinMain@16) и фатал еррор, 1 unresolved externals.

PM MAIL   Вверх
azesmcar
Дата 31.7.2009, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 9
Всего: 211



замени WinMain на int main() { ... }
PM   Вверх
Горя
Дата 31.7.2009, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 24.7.2009

Репутация: нет
Всего: нет



Не, ну я не совсем лох.
Код

int main()
{
    AddExtention("c:\\dir", ".htm");

 return 0;
}

Приложение консольное.
PM MAIL   Вверх
azesmcar
Дата 31.7.2009, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 9
Всего: 211



Тьфу...спутал.как раз наоборот smile 
main замени на
Код

int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)

или
Код

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR    lpCmdLine,
                     int       nCmdShow)

в зависимости от настройки проекта (юникод/не юникод).

Это сообщение отредактировал(а) azesmcar - 31.7.2009, 19:33
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.1000 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.