Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
Прозрачный
0 / 0 / 0
Регистрация: 18.04.2013
Сообщений: 67
1

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

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

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

Макрос для разделения файла на нескольо по страницам
Имеется файл из n страниц, в каждой странице фотография, никаких переносов на следующую страницу...

При чтении файла нет разделения на строки
Я написал прогу,которая при перетаскивании текстового файла читает его содержимое,а при...

Программа для разделения .txt файла на несколько частей
Доброго времени суток! Вот вчера скачал словарь с комбинациями(956 mb) и вот теперь незнаю как...

Чтение части файла из файла и показ его в Image
Здравствуйте! Есть большой файл состоящий из записанных один за одним графических файлов. Данные...

Разбор файла на части
Всем привет как такое можно реализовать? Файл содержит строки вида: "ip" пробел "дата" пробел...

3
Wolkodav
617 / 471 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
15.08.2013, 20:39 2
Прозрачный, а файл какого типа?
0
castaway
Эксперт С++
4947 / 3053 / 456
Регистрация: 10.11.2010
Сообщений: 11,147
Записей в блоге: 10
Завершенные тесты: 1
15.08.2013, 21:13 3
Прозрачный, а файл должен состоять из байт?
0
alsav22
5463 / 4858 / 831
Регистрация: 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;
}
2
16.08.2013, 10:56
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.08.2013, 10:56

Разделение файла на части
Выбранный файл в ListBox1 нужно разделить на n-ное количество частей по нажатию кнопки Button4....

Проигрывание части файла
Как в VideoView проиграть кусочек файла по времени, например с 01.02.321 по 01.03.458 Перейти к...

Переименование части файла
Добрый день. Мы имеем некоторое количество файлов (не более 100, лежат все в одной папке), которые...


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

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

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