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

Сравнение файлов с одинаковыми названиями - C++

Восстановить пароль Регистрация
 
Morfeus
9 / 9 / 1
Регистрация: 22.10.2010
Сообщений: 110
05.12.2012, 19:17     Сравнение файлов с одинаковыми названиями #1
Дано два каталога(dir1, dir2), содержащих файлы *.txt и не содержащие подкаталогов. Наполнить третий каталог (RESULT):
-для каждого файла, который есть и в первом и во втором каталогах, но отличается построчно, нужно сформировать следующий файл разницы t.txt: для тех строк которые отличаются и только для них заносить следующее: 1= «строка из файла 1 каталога», 2= «строка файл из 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
#include "stdafx.h"
#include <iostream>
#include <string>
#include <set>
#include <Windows.h>
#include <stdexcept>
#include <algorithm>
#include <iterator> 
using namespace std;
 
void GetFileNames(string const& dirpath, set<string>& set)
{
    static WIN32_FIND_DATA fd;
    HANDLE hFile = FindFirstFile((dirpath + ("*.txt")).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);
    }
}
int main ( int argc, char ** argv )
{
    if ( argc != 4) 
    { 
        cout << "Not specified" << endl; 
        return 0; 
    }
    do {
        string dirpath1(argv[1]), dirpath2(argv[2]), dirpath3(argv[3]);
        set<basic_string<char>> set1, set2, set3;
 
        GetFileNames(dirpath1, set1);
        GetFileNames(dirpath2, set2);
        
        set_symmetric_difference(set1.begin(), set1.end(), set2.begin(), set2.end(), inserter(set3, set3.begin()));
 
        for(set<string>::const_iterator ci=set3.cbegin(); ci!=set3.cend(); ++ci)
        {
            cout << ci->c_str() << endl;
            if(CopyFile((dirpath1 + *ci).c_str(), (dirpath3 + *ci).c_str(), true));
            else if(!CopyFile((dirpath2 + *ci).c_str(), (dirpath3 + *ci).c_str(), true)){}
        }
    } while(false);
    system("pause");
}


Добавлено через 10 минут
И кстати, как скомпилировать данный код в MinGW на gcc (g++) компиляторе, а то он ругается на эти строки:

C++
1
set<basic_string<char>> set1, set2, set3;
и пишет это:
|29|error: '>>' should be '> >' within a nested template argument list|


C++
1
for(set<string>::const_iterator ci=set3.cbegin(); ci!=set3.cend(); ++ci)
и пишет это:
Код
|36|error: 'class std::set<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,
std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::basic_string<char,
std::char_traits<char>, std::allocator<char> > > >' has no member named 'cbegin'|
|36|error: 'class std::set<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,
std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::basic_string<char,
std::char_traits<char>, std::allocator<char> > > >' has no member named 'cend'|
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.12.2012, 19:17     Сравнение файлов с одинаковыми названиями
Посмотрите здесь:

C++ Сравнение содержимого файлов
C++ Сравнение файлов
C++ сравнение 2 файлов .txt
Обработка файлов с разными названиями одной функцией C++
Сравнение двух дисковых файлов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4925 / 2668 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
05.12.2012, 19:18     Сравнение файлов с одинаковыми названиями #2
C++
1
|29|error: '>>' should be '> >' within a nested template argument list|
пробелов не хватает

C++
1
set<basic_string<char> > set1, set2, set3;
Morfeus
9 / 9 / 1
Регистрация: 22.10.2010
Сообщений: 110
05.12.2012, 19:32  [ТС]     Сравнение файлов с одинаковыми названиями #3
ага, это я понял уже сам )), но спасибо
а вот с другими ошибками то как быть ?

Добавлено через 2 минуты
в visual studio кстати компилит отлично
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4925 / 2668 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
05.12.2012, 19:45     Сравнение файлов с одинаковыми названиями #4
Morfeus, MinGW тоже компилит нормально, если 1 строку убрать, разумеется.
Пробуй так:
C++
1
for(set<string>::const_iterator ci=set3.begin(); ci!=set3.end(); ++ci)
Morfeus
9 / 9 / 1
Регистрация: 22.10.2010
Сообщений: 110
05.12.2012, 20:02  [ТС]     Сравнение файлов с одинаковыми названиями #5
MrGluck, спасибо за помощь с ошибками.
Yandex
Объявления
05.12.2012, 20:02     Сравнение файлов с одинаковыми названиями
Ответ Создать тему
Опции темы

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