Ο τρόπος με τον οποίο ελέγχεις για EndOfStream είναι τουλάχιστον περίεργος - και δεν δουλεύει. Αν υπάρχει οποιοδήποτε πρόβλημα με το αρχείο η ReadLine θα ρίξει exception. Αντί γι αυτό δοκίμαστε να ελέγξεις το sr1.EndOfStream. Επίσης, τα Close() στο τέλος είναι περιττά εφόσον χρησιμοποιείς using. Μπορείς νά γράψεις τον κώδικα σου πολύ πιο απλά:
using (var sr1 = new StreamReader("c:\\input1.txt"))
using (var sr2 = new StreamReader("c:\\input2.txt"))
using (var file = new FileStream("c:\\output.txt", FileMode.Create, FileAccess.Write))
using (var sw = new StreamWriter(file))
{
...
}
Έχω μία απορία πάντως. Όπως έχεις δώσει τον κώδικα δεν μπορεί να γίνει compile γιατί δεν ορίζεις πουθενά τον τύπο των sr1, sr2, file, sw. Μήπως ορίζεις κάπου παραπάνω αυτές τις μεταβλητές? Κάτι τέτοιο δεν είναι καθόλου σωστή τακτική. Μία μεταβλητή πρέπει να ορίζεται όσο το δυνατόν πιο κοντά στο σημείο όπου χρησιμοποιείται. Διαφορετικά θα πρέπει να αντιμετωπίσεις διάφορα προβλήματα π.χ. τί γίνεται αν κάποιος πάει να πειράξει τη μεταβλητή μετά το Close() ή το using {} ? Πόσο θα διατηρηθεί στη μνήμη αυτό το κλεισμένο stream? Τί θα γίνει αν ξεχαστείς και χρησιμοποιήσεις την ίδια μεταβλητή και για άλλο σκοπό?
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos