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

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

Войти
Регистрация
Восстановить пароль
 
Прозрачный
 Аватар для Прозрачный
0 / 0 / 0
Регистрация: 18.04.2013
Сообщений: 66
#1

разделения файла на части - C++

15.08.2013, 20:36. Просмотров 535. Ответов 3
Метки нет (Все метки)

Нужно написать программу для разделения файла на части.
Вы указываете вашей программе файл, который нужно разделить, количество частей, на который нужно разделить файл, и ваша программа из одного файла делает несколько (по сути, разбавит файл на части).
Подобная функция есть в архиваторе WinRAR (составной архив).
Также должна быть предусмотрена обратная операция, чтобы из нескольких частей ранее разделённого вашей программой файла, собрать один файл.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.08.2013, 20:36     разделения файла на части
Посмотрите здесь:

Разделение текстового файла на части C++
Составить функцию для разделения текста в С C++
Поменять части матрицы(из файла) местами с использованием функции C++
C++ C++ разбивка текстового файла на части
Как поделить консоль на 2 части: в верхней части вывод, в нижней - замена C++
Редактирование части файла C++
C++ Добавление разделения строки по пробелам в код
Принцип разделения ввода/вывода C++
Матрица делится на две части главной диагональю. Найти суммы элементов каждой части C++
C++ Считывание части строк из файла в кодировке CP866
Ввести адрес файла и разобрать его на части(строчки с++) C++
Функция разделения строки на лексемы strtok C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Wolkodav
 Аватар для Wolkodav
601 / 454 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
15.08.2013, 20:39     разделения файла на части #2
Прозрачный, а файл какого типа?
castaway
Эксперт С++
4869 / 3008 / 370
Регистрация: 10.11.2010
Сообщений: 11,059
Записей в блоге: 10
Завершенные тесты: 1
15.08.2013, 21:13     разделения файла на части #3
Прозрачный, а файл должен состоять из байт?
alsav22
5410 / 4806 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.08.2013, 10:56     разделения файла на части #4
Кликните здесь для просмотра всего текста
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <sstream>
#include <cstdlib>
 
using namespace std;
 
streamoff f_size(ifstream &fin); // размер файла в байтах
int input_namber_parts(const streamoff &size_file); // ввод количества частей
bool create_parts(); // деление файла на части
bool file_create(); // создание файла из частей
 
int main ()
{
    char ch;
    do 
    {
        cout << "\nCreate a parts of file (1)\n";
        cout << "Create a file of parts (2)\n";
        cout << "Exit (3)\n";
 
        (cin >> ch).get();
        switch (ch)
        {
            case '1' : 
                if (!create_parts())
                {
                    system ("pause");
                    return 0;
                }
                cout << "\nSuccessful!\n" << endl;
                break;
 
            case '2' :
                if (!file_create())
                {
                    system ("pause");
                    return 0;
                }
                cout << "\nSuccessful!\n" << endl;
                break;
        }
    
    } while ((ch != '3'));
    
    system ("pause");
    return 0;
}
 
streamoff f_size(ifstream &fin) // размер файла в байтах
{
    fin.seekg(0, ios::end);
    streamoff size_file = fin.tellg();
    fin.seekg(0);
    return size_file;
}
 
int input_namber_parts(const streamoff &size_file) // ввод количества частей
{
    cout << "Enter the number of parts: ";
    int namber_parts = 0;
    while (!(cin >> namber_parts) || cin.peek() != '\n' || namber_parts <= 1 || namber_parts > size_file)
    {
        cin.clear();
        while (cin.get() != '\n');
        cout << "\nError! Retry input\n";
        cout << "\nEnter the number of parts: " << endl;
    }
    cin.get();
    return namber_parts;
}
 
bool create_parts() // деление файла на части
{
    string file_name;
    cout << "Enter a file name: ";
    getline(cin, file_name);
    
    ifstream fin(file_name, ios::binary);
    if (!fin) 
    {
        cout << "\nError opening the file for reading!\n" << endl;
        return false;
    }
    
    streamoff size_file = f_size(fin);
    
    cout << "\nFile size " << size_file << " bytes\n" << endl;
    
    if (!size_file || (size_file == 1))
    {
        cout << "The file is not divided into parts!\n" << endl;
        return false;
    }
    
    int namber_parts = input_namber_parts(size_file);
    
    streamoff size_part = size_file / namber_parts; // размер части
    streamoff tail = size_file % namber_parts;      // остаток
    streamoff size_first_part = size_part + tail;   // размер первой части
    
    char *buffer = new char[size_first_part];
    
    stringstream s;
    ofstream fout;
    for (int i = 0; i < namber_parts; ++i)
    {
        if (i == 0) fin.read(buffer, size_first_part);
        else fin.read(buffer, size_part);
            
        streamoff size_read = fin.gcount();
        
        s << i + 1;
        string name_part = "part" + s.str() + "_" + file_name;
        s.str("");
            
        fout.open(name_part, ios::binary);
        fout.write(buffer, size_read);
        fout.close();
                
        cout << "file " << name_part << " = " << size_read << " bytes" <<  endl;
        
    }
    delete [] buffer;
    fin.close();
    
    return true;
}
 
bool file_create() // создание файла из частей
{
    string name_part;
    vector <string> v_name_part;
    ifstream fin;
    char ch = 'y';
    
    while (ch == 'y')
    {
        cout << "Enter the name of the part: ";
        getline(cin, name_part);
        
        fin.open(name_part, ios::binary);
        
        if (!fin.is_open()) 
            cout << "\nError opening the file for reading!\n" << endl;
        else if (!f_size(fin)) 
             cout << "\nFile is empty!\n" << endl;
             else
             {
                 v_name_part.push_back(name_part);
                 fin.close();
             }
        
        cout << "Continue? (y/n): ";
        (cin >> ch).get();
    }
    
    int namber_parts = v_name_part.size();
    if (namber_parts == 0)
    {
        cout << "\nThe names of the parts have not entered!\n";
        return false;
    }
    
    cout << "\nEnter a new file name: ";
    string file_name;
    getline(cin, file_name);
 
    ofstream fout(file_name, ios::binary);
    
    streamoff size_part = 0;
    streamoff size_file = 0;
    for (int i = 0; i < namber_parts; ++i)
    {
        fin.open(v_name_part[i], ios::binary);
        
        size_part = f_size(fin);
        char *buffer = new char[size_part];
        
        fin.read(buffer, size_part);
        fout.write(buffer, size_part);
        
        delete [] buffer;
        fin.close();
        size_file += size_part;
        
        cout << "File "  << v_name_part[i] << " = "  
             << size_part  << " bytes\n";
    }
    fout.close();
    
    cout << "\nCreate the file " << file_name << " = " 
         << size_file << " bytes\n";
    
    return true;
}
Yandex
Объявления
16.08.2013, 10:56     разделения файла на части
Ответ Создать тему
Опции темы

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