Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Morfeus
9 / 9 / 1
Регистрация: 22.10.2010
Сообщений: 110
#1

Копирование файлов через сравнение - C++

04.12.2012, 21:23. Просмотров 364. Ответов 1
Метки нет (Все метки)

Сравнить два каталога разницу записать в третий.
В третий каталог нужно положить все файлы, которые есть в первом каталоге , но отсутствуют во втором.
В третий каталог нужно положить все файлы, которые есть во втором каталоге , но отсутствуют в первом.
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
#include "stdafx.h"
#include <iostream>
#include <string>
#include <windows.h>
using namespace std;
 
int main ( int argc, char ** argv )
{
    WIN32_FIND_DATA f1, f2;
    HANDLE hf1 = FindFirstFile("C:\\WORK\\OS\\TEST\\dir1\\*.txt", &f1);
    HANDLE hf2 = FindFirstFile("C:\\WORK\\OS\\TEST\\dir2\\*.txt", &f2);
    if((hf1 != INVALID_HANDLE_VALUE) || (hf2 != INVALID_HANDLE_VALUE)) { 
        do
        {
            string rez1 = "C:\\WORK\\OS\\TEST\\RESULT\\"; rez1 += f1.cFileName;
            string rez2 = "C:\\WORK\\OS\\TEST\\RESULT\\"; rez2 += f2.cFileName;
            string dr1 = "C:\\WORK\\OS\\TEST\\dir1\\";
            dr1 += f1.cFileName;
            string dr2 = "C:\\WORK\\OS\\TEST\\dir2\\";
            dr2 += f2.cFileName;      
 
            string str1 = f1.cFileName, str2 = f2.cFileName;
            if(str1 != str2) {
                cout << f1.cFileName <<"   " <<f2.cFileName <<"      ne ravn"<<endl;
                CopyFile(dr1.c_str(), rez1.c_str(), true);
                CopyFile(dr2.c_str(), rez2.c_str(), true);
            }
            else {
                cout << f1.cFileName <<"   " <<f2.cFileName <<"      ravn"<<endl;
            }
        }while((FindNextFile(hf1,&f1)) || (FindNextFile(hf2,&f2)));
    }    
    FindClose(hf1);
    FindClose(hf2);
 
    system("pause");
}
Как реализовать сравнение как условие для записи файлов ??
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2012, 21:23     Копирование файлов через сравнение
Посмотрите здесь:

копирование файлов C++
C++ Сравнение содержимого файлов
C++ Сравнение файлов
C++ Копирование файлов
C++ Копирование файлов
копирование файлов C++
C++ сравнение файлов
Копирование текстовых файлов C++
Копирование файлов C++ C++
Копирование, сортировка файлов C++
Побайтовое копирование файлов C++
Побайтовое сравнение 2 файлов C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
igorrr37
1611 / 1239 / 124
Регистрация: 21.12.2010
Сообщений: 1,892
Записей в блоге: 7
05.12.2012, 00:40     Копирование файлов через сравнение #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
#include <iostream>
#include <string>
#include <set>
#include <tchar.h>
#include <Windows.h>
#include <stdexcept>
#include <algorithm>
#include <iterator>
 
typedef std::basic_string<TCHAR> tstring;
 
void GetFileNames(tstring const& dirpath, std::set<tstring>& set)
{
    static WIN32_FIND_DATA fd;
    HANDLE hFile = FindFirstFile((dirpath + _T("*.*")).c_str(), &fd);
    if(hFile != INVALID_HANDLE_VALUE)
    {
        do
        {
            if(FILE_ATTRIBUTE_DIRECTORY != fd.dwFileAttributes)
                set.insert(fd.cFileName);
        }
        while(FindNextFile(hFile, &fd));
        FindClose(hFile);
    }
    else
        throw std::runtime_error("FindFirstFile failed");
}
 
int main ()
{
    try
    {
        tstring dirpath1(_T("c:/Test1/")), dirpath2(_T("c:/Test2/")), dirpath3(_T("c:/Test3/"));
        std::set<std::basic_string<TCHAR>> set1, set2, set3;
        GetFileNames(dirpath1, set1);
        GetFileNames(dirpath2, set2);
        std::set_symmetric_difference(set1.begin(), set1.end(), set2.begin(), set2.end(), std::inserter(set3, set3.begin()));
        for(std::set<tstring>::const_iterator ci = set3.cbegin(); ci != set3.cend(); ++ci)
        {
            _tprintf(_T("%s\n"), ci->c_str());
            if(CopyFile((dirpath1 + *ci).c_str(), (dirpath3 + *ci).c_str(), true))
            ;
            else if(!CopyFile((dirpath2 + *ci).c_str(), (dirpath3 + *ci).c_str(), true))
            {
                throw std::runtime_error("CopyFile failed twice");
            }
        }
    }
    catch(std::exception const& e)
    {
        std::cerr << "Exception: " << e.what() << std::endl;
    }
    return 0;
}
Yandex
Объявления
05.12.2012, 00:40     Копирование файлов через сравнение
Ответ Создать тему
Опции темы

Текущее время: 02:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru