तो "विलय" वास्तव में सिर्फ फाइलों को एक दूसरे के बाद लिख रहा है? यह बहुत सरल है - बस एक आउटपुट स्ट्रीम खोलें, और फिर बार-बार इनपुट स्ट्रीम खोलें, डेटा कॉपी करें, बंद करें। उदाहरण के लिए:
static void ConcatenateFiles(string outputFile, params string[] inputFiles)
{
using (Stream output = File.OpenWrite(outputFile))
{
foreach (string inputFile in inputFiles)
{
using (Stream input = File.OpenRead(inputFile))
{
input.CopyTo(output);
}
}
}
}
Stream.CopyTo
विधि है जो नेट 4 में नया है उपयोग कर रहा है यही कारण है कि आप नेट 4 उपयोग नहीं कर रहे हैं, तो एक और सहायक विधि काम में आएगा:
private static void CopyStream(Stream input, Stream output)
{
byte[] buffer = new byte[8192];
int bytesRead;
while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0)
{
output.Write(buffer, 0, bytesRead);
}
}
वहाँ कुछ भी नहीं है कि मुझे पता है कि इससे अधिक कुशल है ... लेकिन महत्वपूर्ण बात यह है कि यह आपके सिस्टम पर बहुत अधिक स्मृति नहीं लेगा। ऐसा नहीं है कि यह बार-बार पूरी फाइल को स्मृति में पढ़ रहा है और फिर इसे फिर से लिख रहा है।
संपादित करें: टिप्पणियों में बताया गया है कि फ़ाइल विकल्प के साथ संभावित रूप से डेटा विकल्प के साथ फाइल सिस्टम के साथ थोड़ा अधिक कुशल बनाते हैं। लेकिन मूल रूप से आप डेटा पढ़ने और इसे लिखने जा रहे हैं, एक समय में एक बफर, किसी भी तरह से।
स्रोत
2010-08-24 13:17:30
पुनश्च: यहाँ एक नजर है (संभव डुप्लिकेट): http://stackoverflow.com/questions/444309/what-would-be-the-fastest-way- टू-कॉन्सटेनेट-तीन-फाइल-इन-सी – Abel