Ο τρόπος που λειτουργούν τα stream φαίνεται όντως λίγο περίεργος αν δεν έχεις ασχοληθεί ποτέ, αλλά είναι ο πιο αποδοτικός τρόπος για να γίνει μια τέτοια δουλειά.
Αφού πάρεις το StreamReader από το web request, πρέπει να ανοίξεις ένα FileStream. Θα διαβάζεις δεδομένα από το πρώτο σε chunks (πακέτα) και θα τα γράφεις στο δεύτερο. Έτσι μπορείς να κατεβάσεις τεράστια αρχεία χωρίς να χρειάζεται να τα φορτώσεις στη μνήμη ολόκληρα και μετά να τα γράψεις σε αρχείο. Οπότε το MemoryStream είναι εφικτή λύση αλλά δεν συστήνεται γι αυτή τη δουλειά.
Οπότε κάνεις ένα byte array μικρού σχετικά μήκους π.χ. 1024 (1KB) και διαβάζεις με την Read από το StreamReader. Στη συνέχεια γράφεις αυτό το array χρησιμοποιώντας την Write του FileStream.
Προσοχή! Πρέπει πάντα να παίρνεις και το return value της Read που επιστρέφει πόσα bytes διαβάστηκαν τελικά. Μπορείς εσύ να του λες να διαβάσει 1024, αλλά στο τέλος του αρχείου θα διαβάσει ότι περισσέψει. Οπότε όταν γράφεις στο FileStream δεν πρέπει να γράφεις όλο το byte array, αλλά έως το σημείο που έγραψε η Read του StreamReader.
Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.