Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

05.12.2012, 19:17. Просмотров 479. Ответов 4
Метки нет (Все метки)

Дано два каталога(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'|
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.12.2012, 19:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сравнение файлов с одинаковыми названиями (C++):

Массив с названиями файлов - C++
Помогите создать массив srting который будет хранить названия всех файлов из папки. int main(){ char name; char...

Обработка файлов с разными названиями одной функцией - C++
Здравствуйте! При написании программы столкнулся с проблемой: у меня используется команда fopen(&quot;1.txt&quot;, &quot;wt&quot;); Сейчас встала...

Прочитать данные из двух указанных файлов, содержащих записи с названиями книг - C++
Программа должна прочитать данные из двух указанных файлов, содержащих записи с названиями книг (число записей может быть различно и...

сравнение файлов - C++
Нужно доделать программу вот по такому заданию Даны символьные файлы f и s . Записать в файл h все начальные совпадающие компоненты...

Сравнение файлов - C++
Привет всем ! Дано два текстовых файла. Сравнить их содержимое и в новый файл записать либо номер первой строки, в которой они...

Сравнение содержимого файлов - C++
Мини-задача состоит в следующем необходимо найти в одном (А) файле содержимое второго (В). Так вот хотелось бы получить совет как...

4
MrGluck
Модератор
Эксперт CЭксперт С++
7490 / 4605 / 691
Регистрация: 29.11.2010
Сообщений: 12,589
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;
1
Morfeus
9 / 9 / 1
Регистрация: 22.10.2010
Сообщений: 110
05.12.2012, 19:32  [ТС] #3
ага, это я понял уже сам )), но спасибо
а вот с другими ошибками то как быть ?

Добавлено через 2 минуты
в visual studio кстати компилит отлично
0
MrGluck
Модератор
Эксперт CЭксперт С++
7490 / 4605 / 691
Регистрация: 29.11.2010
Сообщений: 12,589
05.12.2012, 19:45 #4
Morfeus, MinGW тоже компилит нормально, если 1 строку убрать, разумеется.
Пробуй так:
C++
1
for(set<string>::const_iterator ci=set3.begin(); ci!=set3.end(); ++ci)
1
Morfeus
9 / 9 / 1
Регистрация: 22.10.2010
Сообщений: 110
05.12.2012, 20:02  [ТС] #5
MrGluck, спасибо за помощь с ошибками.
0
05.12.2012, 20:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.12.2012, 20:02
Привет! Вот еще темы с ответами:

Побайтовое сравнение 2 файлов - C++
Ребят , кто может написать хороший для побайтового сравнения 2 любых файлов ? Хочу посмотреть как это должно выглядеть. Заранее спасибо...

Побайтное сравнение двух файлов - C++
#include &lt;locale.h&gt; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; int main(int argc, char *args) { setlocale(LC_ALL, &quot;rus&quot;); ...

Сравнение двух дисковых файлов - C++
Здравствуйте, как написать функцию, которая сравнивает содержимое двух дисковых файлов и выдает сообщение, если есть хотя бы одно...

Копирование файлов через сравнение - C++
Сравнить два каталога разницу записать в третий. В третий каталог нужно положить все файлы, которые есть в первом каталоге , но...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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