2016-07-12 26 views
-1

Erstellen Sie eine neue Instanz von FileStream ohne Angabe anderer Parameter im Konstruktor anstelle von Parametern aus der Source FileStream. Wie kann ich es tun?Wie erstellen Sie eine Instanz von FileStream aus FileStream?

FileStream fs= new FileStream([any parametrs]); 

FileStream copy1= new FileStream(parametrs from fs); // First variant 
FileStream copy2= new FileStream(fs); // Or second variant 

Zum Beispiel erstelle ich filestream

FileStream fs = new FileStream(_fileName, FileMode.Open, FileAccess.Read, FileShare.Read, 4 * 1024, true) 

Jetzt habe ich eine Menge unabhängige Kopien von ihm wollen, aber fs speichert keine parametrs von Konstruktor erhalten.

+2

Was wollen Sie eigentlich erreichen? Es ist überhaupt nicht offensichtlich aus der Frage. –

+0

Ich möchte eine Menge von Klonen aus einem FileStream erstellen. Aber FileStream hat keine Konstruktorkopie. – askeet

+1

Vielleicht könnten Sie das Problem, das Sie lösen möchten, genauer erläutern, da das Klonen von Dateistreams sehr nach schlechter Praxis klingt. – Mixxiphoid

Antwort

0

wie diese

class FileStreamExt : FileStream 
{ 

    private string _fileName; 
    private FileMode _mode; 

    public FileStreamExt Clone() 
    { 
     return new FileStreamExt(_fileName, _mode); 
    } 

    public FileStreamExt(string filename, FileMode mode) 
     : base(filename, mode) 
    { 
     _fileName = filename; 
     _mode = mode; 
    } 
} 

    FileStreamExt fs = FileStreamExt(_fileName,FileAccess.Read); 
    FileStreamExt copy = fs.Clone(); 
Gelöst
+0

Willkommen in der Welt der intermittierenden Dateisperrungsausnahmen. – trailmax

+0

Warum denken Sie, dass verschiedene Klone von FileStreamExt zeitweise Dateisperren haben? – askeet

+0

Wenn Sie so "klonen" - Datei effektiv zum erneuten Lesen öffnen. In der Theorie sollte 'FileAccess.Read' keine Sperren verursachen, aber ich habe alle möglichen Probleme damit gesehen. Ein viel sicherer Vorschlag wurde Ihnen über – trailmax

0

Was ist mit Stream.CopyTo();

FileStream fs= new FileStream([any parametrs]); 
var copy1 = new MemoryStream(); 
fs.CopyTo(copy1) 

Es sollte funktionieren

+0

Ich verwende Framework 3.5. Auch nicht sicher, dass neue Instanz den gleichen Parameter von Konstruktor fs haben wird. – askeet