2016-07-12 7 views
-1

Как создать новый экземпляр FileStream без указания других параметров в конструкторе вместо параметров из исходного файла FileStream. Как мне это сделать?Как создать экземпляр FileStream из FileStream?

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

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

Например, я создаю FileStream

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

Теперь я хочу много независимых копии от него, но fs не сохраняет любой parametrs полученного от конструктора.

+2

Что вы на самом деле пытаетесь достичь? Это не совсем очевидно из вопроса. –

+0

Я хочу создать много клона из FileStream. Но FileStream не имеет копии конструктора. – askeet

+1

Возможно, вы могли бы разработать проблему, которую пытаетесь решить, потому что клонирование многопотоков звучит как очень плохая практика. – Mixxiphoid

ответ

0

решаемые как этот

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(); 
+0

Добро пожаловать в мир прерывистых исключений блокировки файлов. – trailmax

+0

Почему, по вашему мнению, у разных клонов из FileStreamExt есть прерывистые исключения блокировки файлов? – askeet

+0

Когда вы делаете «клонирование», как это, - эффективно открывайте файл для чтения снова. Теоретически 'FileAccess.Read' не должен вызывать блокировки, но я видел всевозможные проблемы с этим. Было предложено намного более безопасное предложение выше – trailmax

0

Что такое Stream.CopyTo();

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

Он должен работать

+0

Я использую Framework 3.5. Также не уверен, что новый экземпляр будет иметь тот же параметр из конструктора fs. – askeet