2016-05-15 67 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> filesfiles.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]。你的代碼沒有爲數組中的字符串分配內存,這就是爲什麼存在段錯誤的原因。

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; 
}