2016-05-15 3 views
0

Я хочу получить несколько файлов от пользователя, а затем читать и записывать их как двоичный режим в файле struct.txt и в других файлах экспорта программы из файла struct.txt. пожалуйста, направляйте меня. Importing - mergeexporting - unmergeчтение написать несколько файлов в C++

#include <iostream> 
#include <string> 
#include <fstream> 
#include <iterator> 
#include <algorithm> 
using namespace std; 
int tedad_file=0; // get count of files from user // 

int main() 
{ 
    int tr=0; 
    cout << "please enter count of files you want to merge "; 
    cin >> tedad_file; 
    cout << "\n"; 
    std::string *files[tedad_file]; 
    int counter=0; 
    int temp=0; 
    for(;temp<tedad_file;temp++) // getting file's address from user and add them into arrays of string (files variable) 
    { 
     cout << "Lotfan address file " << temp + 1 << " vared konid: \n"; 
     cin >> *files[temp]; 
    } 

    std::ofstream output_file("D:\\struct.txt", std::ios::binary) ; 
    int x=0; 
    for(;x<tedad_file;x++) // for - read content of files to merge them into struct.txt ---- for example tedad_file is 3 
    { 
     std::ifstream first_file((char *)&files[tedad_file], std::ios::binary) ; 
     output_file << first_file.rdbuf(); 
    } 
    return 0; 
} 

ответ

1

Вы должны использовать std::vector<std::string> files и files.push_back(filename) Например:

int main() 
{ 
    std::vector<std::string> files; 

    cout << "please enter count of files you want to merge "; 
    int file_count = 0; 
    cin >> file_count; 

    for (int temp = 0; temp<file_count; temp++) 
    { 
     cout << "Lotfan address file " << " vared konid: \n"; 
     std::string filename; 
     cin >> filename; 
     files.push_back(filename); 
    } 

    std::ofstream output_file("D:\\struct.txt", std::ios::binary); 
    for (auto file : files) 
    { 
     std::ifstream fin(file, std::ios::binary); 
     output_file << fin.rdbuf(); 
    } 

    return 0; 
} 

В противном случае используйте оператор new. Но метод new склонен к ошибке. Например:

int main() 
{ 
    cout << "please enter count of files you want to merge "; 
    int tedad_file = 0; 
    cin >> tedad_file; 
    cout << "\n"; 

    std::string *files = new std::string[tedad_file]; 
    for (int temp = 0; temp<tedad_file; temp++) 
    { 
     cout << "Lotfan address file " << " vared konid: \n"; 
     cin >> files[temp]; 
    } 

    std::ofstream output_file("D:\\struct.txt", std::ios::binary); 
    for (int temp = 0; temp<tedad_file; temp++) 
    { 
     std::ifstream first_file(files[temp], std::ios::binary); 
     output_file << first_file.rdbuf(); 
    } 

    delete[]files; 
    return 0; 
} 
+0

Я не могу понять, не могли бы вы показать это в коде? благодаря –

1

Почему вы написали эту строку: std::string *files[tedad_file];? Вы должны сначала выделить память для этого указателя. Было бы лучше, если бы вы просто не использовали указатели здесь и делали что-то вроде: std::string files[tedad_file]. Ваш код не выделял память для строк в массиве, и именно по этой причине существует segfault.

0

решаемые таким образом

int tedad_file=0; // Daryaft tedad file jahate edgham // 

int main() 
{ 
int tr=0; 
cout << "Lotfan Tedad file jahate edgham vared konid: "; 
cin >> tedad_file; 
cout << "\n"; 
std::string files[tedad_file]; 
int counter=0; 
int temp=0; 
for(;temp<tedad_file;temp++) 
{ 
cout << "Lotfan address file " << temp + 1 << " vared konid: \n"; 
cin >> files[temp]; 
} 
streampos size1; 
std::ofstream output_file("D:\\test.txt", std::ios::binary) ; 
int x=0; 
string dd; 
for(;x<tedad_file;x++) 
{ 
dd = files[x]; 
std::ifstream first_file(dd.c_str(), std::ios::binary) ; 
output_file << first_file.rdbuf(); 
size1 = first_file.tellg(); 
cout << size1; 
} 

return 0; 
} 
Смежные вопросы