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

Програма для диплома - C++

Восстановить пароль Регистрация
 
tekmzal
0 / 0 / 0
Регистрация: 06.04.2013
Сообщений: 6
02.06.2013, 18:26     Програма для диплома #1
Здраствуйте, как видно по теме мне нужно зделать програму для диплома програма должна находить 2 файлы с одинаковым размером разширением и названием но я даже не представляю как зделать такой поиск =( если вас не затруднит кинуть похожий код или дать сылку где есть статья в каторая раскажут как зделать ету програму и кстате програму буду делать на с++ builder так что если знаете какие компоненты можна использовать для вывода файлов напишите=) Заранее спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
skaa
Хочу в Исландию
 Аватар для skaa
1024 / 823 / 75
Регистрация: 10.11.2010
Сообщений: 1,626
04.06.2013, 17:58     Програма для диплома #2
Надо считать имена всех файлов куда-нибудь (в массив или в файл), остортировать этот список и пройти по нему сравнивая текущее имя со следующим.
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
04.06.2013, 22:51     Програма для диплома #3
tekmzal, не знаю какими именно методами вы воспользуетесь для своей программы, но вот я вам сделал на boost. Принцип такой же как и рекомендовали выше - закидываем все файлы с директории в массив, сортируем и выводим те которые нам надо. Код:
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <iostream>
#include <iomanip>
#include <fstream>
#include <vector>
#include <iterator>
#include <algorithm>
#include <functional>
#include <windows.h>
#include <boost/filesystem/operations.hpp>
#include <boost/filesystem/path.hpp>
 
namespace fs = boost::filesystem;
 
typedef std::pair<fs::path, boost::uintmax_t> data;
 
void get_all_files(const fs::path& p, std::vector<data>& files)
{
    for (fs::directory_iterator pos(p); pos != fs::directory_iterator(); ++pos)
    {
        if (fs::is_directory(*pos)) get_all_files(*pos, files);
        else
            files.push_back(std::make_pair(*pos, fs::file_size(*pos)));
    }
}
 
int main(){
    SetConsoleCP (1251); SetConsoleOutputCP (1251);
    
    fs::path directory_path("D://Temp");
    std::vector<data> files;
    get_all_files(directory_path, files);
    if (!files.empty())
    {
        std::cout<<"Список всех файлов в директории "<<directory_path<<"("<<files.size()<<" файлов):\n\n";
        for (const auto& file : files) 
        {
            std::cout<<std::setw(20)<<std::left<<file.first.filename().generic_string();
            std::cout<<std::left<<file.second<<" байт\n";
        }
    
        std::sort(files.begin(), files.end(), [](const data& p1, const data& p2)
        {
            if (p1.first.filename().generic_string() == p2.first.filename().generic_string())
                return p1.second < p2.second;
            else
                return p1.first.filename().generic_string() < p2.first.filename().generic_string();
        });
        
        std::cout<<"\n\nСписок одноименных файлов с одинаковым размером:\n\n";
        data check = files.front();
        bool match = false;
        std::for_each(files.begin()+1, files.end(), [&](const data& d)
        {
            if (check.first.filename() == d.first.filename() && check.second == d.second)
            {
                match = true;
                std::cout<<std::setw(20)<<std::left<<d.first.filename().generic_string();
                std::cout<<std::left<<d.second<<" байт ";
                std::cout<<std::setw(10)<<std::left<<d.first.generic_string()<<'\n';
            }
            else
            {
                if (match)
                {
                    std::cout<<std::setw(20)<<std::left<<check.first.filename().generic_string();
                    std::cout<<std::left<<check.second<<" байт ";
                    std::cout<<std::setw(10)<<std::left<<check.first.generic_string()<<"\n\n";
                    std::cout<<"##############################################################\n\n";
                }
                match = false;
                check = d;
            }
        });
    }
    else
        std::cout<<"Файлов в директории "<<directory_path<<" нет.";
    
    std::cout<<'\n';
    return 0;
}
Вывод:
Список всех файлов в директории "D://Temp"(35 файлов):

desktop.ini 90 байт
error_demo.cpp 5187 байт
file_size.cpp 1065 байт
file_status.cpp 3474 байт
Jamfile.v2 729 байт
mbcopy.cpp 2624 байт
mbpath.cpp 2956 байт
mbpath.hpp 1221 байт
path_info.cpp 3486 байт
simple_ls.cpp 2485 байт
stems.cpp 795 байт
tchar.cpp 944 байт
xxx.txt 5 байт
bld.bat 192 байт
bld.sh 190 байт
Jamfile.v2 879 байт
setup.bat 344 байт
setup.sh 364 байт
xxx 5 байт
xxx.txt 5 байт
tut0.cpp 566 байт
tut1.cpp 592 байт
tut2.cpp 1043 байт
tut3.cpp 1597 байт
tut4.cpp 1796 байт
tut5.cpp 1600 байт
tut6a.cpp 1056 байт
tut6b.cpp 1169 байт
tut6c.cpp 906 байт
xxx 5 байт
xxx.txt 5 байт
xxx 5 байт
xxx.com 5 байт
xxx.txt 221 байт
xxx.txt 5 байт


Список одноименных файлов с одинаковым размером:

xxx 5 байт D://Temp/example/xxx
xxx 5 байт D://Temp/example/test/xxx
xxx 5 байт D://Temp/xxx

##############################################################

xxx.txt 5 байт D://Temp/Новая папка/xxx.txt
xxx.txt 5 байт D://Temp/example/xxx.txt
xxx.txt 5 байт D://Temp/example/test/xxx.txt
xxx.txt 5 байт D://Temp/example/test/1/xxx.txt

##############################################################
Возможны мелкие недочеты
tekmzal
0 / 0 / 0
Регистрация: 06.04.2013
Сообщений: 6
05.06.2013, 04:08  [ТС]     Програма для диплома #4
большое спасибо за помош =)
Dmitriy_M
1294 / 1175 / 104
Регистрация: 20.03.2009
Сообщений: 4,208
Записей в блоге: 11
05.06.2013, 11:32     Програма для диплома #5
Цитата Сообщение от DiffEreD Посмотреть сообщение
закидываем все файлы с директории в массив
Теоретически при использование массива/хеша/мапа может не хватить памяти, т. к. у той же NTFS максимальное количество файлов http://www.cyberforum.ru/cgi-bin/latex.cgi?2^{32}-1
tekmzal
0 / 0 / 0
Регистрация: 06.04.2013
Сообщений: 6
09.06.2013, 19:52  [ТС]     Програма для диплома #6
Цитата Сообщение от DiffEreD Посмотреть сообщение
tekmzal, не знаю какими именно методами вы воспользуетесь для своей программы, но вот я вам сделал на boost. Принцип такой же как и рекомендовали выше - закидываем все файлы с директории в массив, сортируем и выводим те которые нам надо. Код:
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <iostream>
#include <iomanip>
#include <fstream>
#include <vector>
#include <iterator>
#include <algorithm>
#include <functional>
#include <windows.h>
#include <boost/filesystem/operations.hpp>
#include <boost/filesystem/path.hpp>
 
namespace fs = boost::filesystem;
 
typedef std::pair<fs::path, boost::uintmax_t> data;
 
void get_all_files(const fs::path& p, std::vector<data>& files)
{
    for (fs::directory_iterator pos(p); pos != fs::directory_iterator(); ++pos)
    {
        if (fs::is_directory(*pos)) get_all_files(*pos, files);
        else
            files.push_back(std::make_pair(*pos, fs::file_size(*pos)));
    }
}
 
int main(){
    SetConsoleCP (1251); SetConsoleOutputCP (1251);
    
    fs::path directory_path("D://Temp");
    std::vector<data> files;
    get_all_files(directory_path, files);
    if (!files.empty())
    {
        std::cout<<"Список всех файлов в директории "<<directory_path<<"("<<files.size()<<" файлов):\n\n";
        for (const auto& file : files) 
        {
            std::cout<<std::setw(20)<<std::left<<file.first.filename().generic_string();
            std::cout<<std::left<<file.second<<" байт\n";
        }
    
        std::sort(files.begin(), files.end(), [](const data& p1, const data& p2)
        {
            if (p1.first.filename().generic_string() == p2.first.filename().generic_string())
                return p1.second < p2.second;
            else
                return p1.first.filename().generic_string() < p2.first.filename().generic_string();
        });
        
        std::cout<<"\n\nСписок одноименных файлов с одинаковым размером:\n\n";
        data check = files.front();
        bool match = false;
        std::for_each(files.begin()+1, files.end(), [&](const data& d)
        {
            if (check.first.filename() == d.first.filename() && check.second == d.second)
            {
                match = true;
                std::cout<<std::setw(20)<<std::left<<d.first.filename().generic_string();
                std::cout<<std::left<<d.second<<" байт ";
                std::cout<<std::setw(10)<<std::left<<d.first.generic_string()<<'\n';
            }
            else
            {
                if (match)
                {
                    std::cout<<std::setw(20)<<std::left<<check.first.filename().generic_string();
                    std::cout<<std::left<<check.second<<" байт ";
                    std::cout<<std::setw(10)<<std::left<<check.first.generic_string()<<"\n\n";
                    std::cout<<"##############################################################\n\n";
                }
                match = false;
                check = d;
            }
        });
    }
    else
        std::cout<<"Файлов в директории "<<directory_path<<" нет.";
    
    std::cout<<'\n';
    return 0;
}
Вывод:Возможны мелкие недочеты
выбивает ошибку [C++ Error] Unit1.cpp(14): E2209 Unable to open include file 'boost/filesystem/path.hpp'
[C++ Error] Unit1.cpp(29): E2090 Qualifier 'boost' is not a class or namespace name
[C++ Error] Unit1.cpp(29): E2282 Namespace name expected
[C++ Error] Unit1.cpp(31): E2316 'path' is not a member of 'fs'
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.06.2013, 19:56     Програма для диплома
Еще ссылки по теме:

C++ Найти сумму первых 5 цифр дробной части действительного числа.например для числа 23,1680989 она равна 24.Програма на С++
C++ Програма для нахождения максимального повторения!
C++ Какую среду разработки выбрать для диплома

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

Или воспользуйтесь поиском по форуму:
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,409
09.06.2013, 19:56     Програма для диплома #7
tekmzal, а вы хоть библиотеку буст скачали?

Добавлено через 21 секунду
А пролинковали к проекту?
Yandex
Объявления
09.06.2013, 19:56     Програма для диплома
Ответ Создать тему
Опции темы

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