Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 09.11.2015
Сообщений: 61
1

Копирование, сортировка файлов

11.11.2015, 12:13. Показов 1470. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день! У меня в папке много различных файлов необходимо, переместить или скопировать их по различным созданным папкам(сортировка не по расширениям)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.11.2015, 12:13
Ответы с готовыми решениями:

Копирование файлов с переменного диска - автоопределение + сортировка формата
Копирую с флешки постоянно обновления. Путь к флешке (ДИСК) постоянно разный (D, E, F, G) В...

Копирование: Ввод имени папки и копирование из нее файлов
Доброго времени суток! Реально ли реализовать подобное с помощью bat ? Знаю, что можно создать...

Копирование файлов из разных каталогов в каталоги с именами, соответствующими номерам в именах файлов
Добрый день! Помогите решить проблему. Есть семь папок (cam_1, cam_2, cam_3 и.т.д) с фотографиями...

Копирование файлов из одной папки в другую, но с пропуском одинаковых файлов в этих папках
Доброго времени суток. Прошу помощи в написании батника. Задача: Есть папка А с файлами 1,2,3 и...

9
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
11.11.2015, 12:20 2
VasNasSev, Оооо друг брат, я уже это месяц пишу)))) давай рассказывай чего хочешь? у меня почти все готово, только красоту навожу
1
0 / 0 / 0
Регистрация: 09.11.2015
Сообщений: 61
11.11.2015, 14:23  [ТС] 3
Пришли пожалуйста свою версию кода. Я реализовывал через CopyFile(
0
7792 / 6559 / 2984
Регистрация: 14.04.2014
Сообщений: 28,669
11.11.2015, 14:25 4
И чем плоха CopyFile()?
0
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
11.11.2015, 15:45 5
VasNasSev, тебе какаую чать кода?

Добавлено через 10 секунд
Его у меня много
0
0 / 0 / 0
Регистрация: 09.11.2015
Сообщений: 61
11.11.2015, 23:21  [ТС] 6
Мне нужно само копирование. Не через rename случайно?
0
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
11.11.2015, 23:47 7
Цитата Сообщение от VasNasSev Посмотреть сообщение
Не через rename случайно?
нет)) У меня честно выпрошено у форумчан и слеплена из 2х кусков для красивости
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <iostream>
#include <copyfile.h>
#include <sys/stat.h>
 
using namespace std;
 
struct space_out : std::numpunct<char> {
    char do_thousands_sep()   const { return ' '; }
    std::string do_grouping() const { return "\3"; }
};
 
inline void draw_progress_bar( int percents )
{
    int half = percents / 2;
    std::cout<<"\r[";
    for ( int i = 0; i <    half; ++i ) putc( '|', stdout );
    for ( int i = 0; i < 50-half; ++i ) putc( ' ', stdout );
    std::cout<<"] %"<< percents;
    fflush( stdout );
}
 
inline int copy_callback(int what, int stage, copyfile_state_t state, const char *src, const char *dst, void *ctx)
{
    off_t bcount;
    struct stat *st = (struct stat *) ctx;
    copyfile_state_get(state, COPYFILE_STATE_COPIED, &bcount);
    system("clear");
    int res=bcount;                                                         // для выбора системы размерности
    int Progres=(size_t) ((bcount / (double) st->st_size) * 100.0);         // выполнено в %
    std::cout.imbue(std::locale(std::cout.getloc(), new space_out));        // переключение вывода с 123456 на 123 456
    std::cout <<"" <<src << ": " << st->st_size << " / "<< res << " Bt copied. "<< endl;
    draw_progress_bar(Progres);
    std::cout<<std::endl;
    return COPYFILE_CONTINUE;
}
 
void cf(const char *from,const char *to)
{
    struct stat st;
    stat(from, &st);
    copyfile_state_t state = copyfile_state_alloc();
    copyfile_state_set(state, COPYFILE_STATE_STATUS_CB, (const void *) &copy_callback);
    copyfile_state_set(state, COPYFILE_STATE_STATUS_CTX, (const void *) &st);
    if (copyfile(from, to, state, COPYFILE_ALL) != 0) {
        cerr << "copy failed" << endl;
    }
    copyfile_state_free(state);
}
 
 
 
 
 
int main()
{
    cf("win7.iso","test/win7.iso");
    return 0;
}
0
166 / 69 / 17
Регистрация: 22.03.2011
Сообщений: 196
12.11.2015, 02:12 8
Цитата Сообщение от Mesteriis Посмотреть сообщение
std::cout.imbue(std::locale(std::cout.getloc(), new space_out));
mother of god....
не нужно делать это каждый раз в коллбеке.
0
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
12.11.2015, 12:02 9
pproger, Это пока черновой вариант, сегодня завтра все по классам разнесу
0
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
12.11.2015, 14:04 10
Лучший ответ Сообщение было отмечено VasNasSev как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <string>
 
#define BOOST_NO_AUTO_PTR
#define BOOST_NO_CXX11_SCOPED_ENUMS
#include <boost/filesystem.hpp>
#include <boost/range/algorithm.hpp>
 
namespace fs = boost::filesystem;
namespace br = boost::range;
 
int main()
{
   const std::string source_dir = "D:\\Temp";
   std::vector<fs::path> files{fs::recursive_directory_iterator(source_dir), {}};
   files.erase(br::remove_if(files, [](const fs::path &p){return !fs::is_regular_file(p);}), files.end());
 
   std::string copy_to1 = "\\copy_group1", copy_to2 = "\\copy_group2";
   fs::create_directory(source_dir + copy_to1);
   fs::create_directory(source_dir + copy_to2);
 
   auto first_group = [](const fs::path& p){return p.filename().string().substr(0, 2) == "ab";};
   auto second_group = [](const fs::path& p){return p.filename().string().substr(0, 3) == "dll";};
   br::for_each(files, [&](const fs::path& p)
   {
      if (first_group(p))
         fs::copy_file(p, source_dir + copy_to1 + "\\" + p.filename().string());
      if (second_group(p))
         fs::copy_file(p, source_dir + copy_to2 + "\\" + p.filename().string());
   });
   std::cout << "Done.";
}
1
12.11.2015, 14:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.11.2015, 14:04
Помогаю со студенческими работами здесь

Копирование файлов с переименованием в случае совпадения имён перемещаемых и имеющихся в папке назначения файлов
Добрый день. Помогите создать bat файл. Смысл в чем есть папка загрузки на компьютере с нее файлы и...

Копирование файлов с FTP-сервера на компьютеры клиентов без замены уже имеющихся файлов
Приветствую. Такая задача. имеется фтп сервер. на нем лежит 5 папок, в каждой паке каждый день...

Копирование отсутствующих и изменённых файлов по результатам сверки файлов одного каталога с файлами другого
Всем привет. такая вот задача у меня. я не селен в этом. но стараюсь. есть 2 каталога (1. NEW, 2....

Копирование файлов по списку в текстовом файле в папки с именами, соответствующими расширениям этих файлов
Добрый день, уважаемые форумчане. Прошу помощи с написанием bat-файла. Значит задача такая. Есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru