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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Подготовка к решению сложных задач и задач олимп.уровня http://www.cyberforum.ru/cpp-beginners/thread938603.html
Собственно, интересует какую литературу стоит почитать, для решению сложных и интересных задач или может быть есть какие- нибудь известные в узком кругу форумы на эту тему
C++ Запись элемента строки в char Никак не получается записать элемент строки в переменную char. #include <iostream> #include <conio.h> #include <cstdlib> #include <math.h> #include <fstream> #include <sstream> http://www.cyberforum.ru/cpp-beginners/thread938575.html
C++ Работа с mysql
Всем привет ) Тута нада к базе запрос делать, а выбирает только первую запись ) #include <stdio.h> #include <stdlib.h> #include <mysql/mysql.h> int main(int a, char ** argv) { MYSQL * conn;
C++ переопределение операторов
Стоит следующая задача. Надо сделать массив чар, которые представляют собой строку (специально делать так, а не через string) и надо сделать переопределение операторов: operator + operator - operator < operator > operator != operator == operator на пример, для operator +, чтобы можно было додавать две строки через знак +.
C++ Символьный массив (просуммировать элементы массива и вывести их сумму) http://www.cyberforum.ru/cpp-beginners/thread938542.html
Задача состоит в том чтоб просумировать елементы масива и вывести их сумму. Масив заполняется числами, он может заполнятся не полностю поетому использую функцыю gets(). Пример вход: 236 выход:11 Вот что получилось 155 #include <iostream> #include <cstdio> using namespace std; int main (){ int sum = 0; char *x = new char ;
C++ Ввод кириллицы в С++ При вводе значения переменной типа string или char кириллицей всегда выдает кракозябры. setlocale помогает только для вывода (cout,printf работают безотказно). Ничего не нашел полезного в гугле, везде либо предлагают изменить раскладку на досовскую 866 (работает до первого сохранения .срр файла), либо какие то сложные и непонятные функции. Как лечить? подробнее

Показать сообщение отдельно
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.08.2013, 10:56     разделения файла на части
Кликните здесь для просмотра всего текста
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;
}
 
Текущее время: 00:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru