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

Поиск:

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


Опытный
**


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

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



Цитата(Горя @  3.8.2009,  21:48 Найти цитируемый пост)
Нету больше ошибок.


Т.е. нету? Компилятор не выдает или работает без ошибок? Все файлы переименовывает?


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

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


Новичок



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

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



При компиляции и постройке никаких ошибок не выдаёт. Переименовывает только часть.
PM MAIL   Вверх
Gordon
Дата 3.8.2009, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Горя @  3.8.2009,  22:32 Найти цитируемый пост)
Переименовывает только часть.


Может быть, файлы с такими именами уже есть в директории? Т.е. есть файлы "1" и "1.htm", тогда переименование не произойдет.


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

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


Новичок



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

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



Gordon, да нет, у меня ж не может там уже быть двух одинаковых файлов. При переименовании же имя никак не меняется, только добавляется .хтм. Нет, у меня папка полна файлов без расширения, естественно, с уникальными именами, и никаких больше там файлов нет.
PM MAIL   Вверх
Gordon
Дата 4.8.2009, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Горя, а чем файлы, которые не переименовываются, "отличаются" от тех, которые переименовываются... Может они заняты другим приложением? 


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

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


Новичок



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

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



Суть такая: пользуя вгет качаю форум. На форуме страницы все в хтмле. Вгет сохраняет их как viewtopic.php@pid=***, вместо звёздочек - трёхзначное число. И таких вьютопиков пятьсот с лишком штук, но все без нормального расширения оказываются (проблемы с хостом).
То есть файлы все совершенно одинаковые, и их имена разнятся лишь на последние три цифры.
PM MAIL   Вверх
Gordon
Дата 6.8.2009, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Горя, ну попробуй вставить в код проверку на ошибки при переименовании и посмотри почуму ошибка... 

p.s. честно говоря, не знаю, может MoveFileEx поможет?


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

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


Новичок



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

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



Стыдно спрашивать, но как её вставить? smile 
PM MAIL   Вверх
zim22
Дата 6.8.2009, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



Цитата(Горя @  6.8.2009,  13:20 Найти цитируемый пост)
как её вставить?

CTRL+V


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


Новичок



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

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



zim22,  smile 
Только, прикиньте, ничего не вставляется.
PM MAIL   Вверх
Gordon
Дата 6.8.2009, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Если возвращенное MoveFile значение не "true" тогда вызвать функцию GetLastError() для получения кода ошибки (может он что подскажет)...


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

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


Опытный
**


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

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



Можно примерно так написать:
Код

if(!MoveFileA(std::string(dir).append("\\").append(file.cFileName).c_str(), 
    std::string(dir).append("\\").append(file.cFileName).append(ext).c_str()))
{
    std::cout << "Error code: " << GetLastError() 
        << "\tFile name: " << file.cFileName << std::endl;            
}


Можно еще использовать функцию "FormatMessage", а можно посмотреть описание ошибок тут, вроде те...


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

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


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

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



Вот это должно работать с любыми настройками (Юнткод, Мультибайт и обычный) :
Код

#include <stdio.h>
#include <tchar.h>
#include <windows.h>

void RenameFiles(TCHAR* dir, TCHAR* newExt)
{
    TCHAR tdir[MAX_PATH];
    _stprintf_s(tdir, _T("%s/*"), dir);

    WIN32_FIND_DATA dt;
    HANDLE hFind = FindFirstFile(tdir, &dt);
    if (hFind != INVALID_HANDLE_VALUE)
    {
        do
        {
            if(!_tcschr(dt.cFileName, '.'))
            {
                TCHAR tname[MAX_PATH];
                TCHAR oname[MAX_PATH];
                _stprintf_s(tname, _T("%s/%s.%s"), dir, dt.cFileName, newExt);
                _stprintf_s(oname, _T("%s/%s"), dir, dt.cFileName);
                MoveFile(oname, tname);
            }
        } while (FindNextFile(hFind, &dt));
        FindClose(hFind);
    }
}

Использовать так :
Код

int _tmain(int argc, _TCHAR* argv[])
{
    RenameFiles(_T("g:/projects/massfilerename/testdata"), _T("html"));

    getchar();
    return 0;
}



--------------------
user posted image
PM MAIL   Вверх
Горя
Дата 6.8.2009, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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
PM MAIL   Вверх
Mad
Дата 6.8.2009, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 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 :
Цитата

warning C4996: '_swprintf': This function or variable may be unsafe. Consider using _swprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details



--------------------
user posted image
PM MAIL   Вверх
Страницы: (4) Все 1 2 [3] 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

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


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

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

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

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


 




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


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

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