запись большого потока в файл в C # .Net 64K на 64K - PullRequest
0 голосов
/ 14 мая 2011

Пожалуйста, предложите мне хороший метод, который можно использовать для записи потока в файл.

Мне просто нужна простая функция c #, которая может принимать поток в качестве входных данных и выполнять работу. Мне нужносделать это для очень больших файлов, т.е. файлов> 4 ГБ.

Можно ли сделать это лучше, используя linq, методы расширения и т. д.через yield.

Редактировать: Я знаю о циклическом прохождении байта [] и записи его в файл.Я пробовал метод File.WriteAllBytes.Но я просто ищу очень хороший способ сделать это, используя методы linq, yield и extension.

1 Ответ

3 голосов
/ 14 мая 2011

Редактировать : Вот полезная функция, которая должна сделать трюк:

Обновление : изменен второй параметр на имя файла

    public delegate void ProgressCallback(long position, long total);
    public void Copy(Stream inputStream, string outputFile, ProgressCallback progressCallback)
    {
        using (var outputStream = File.OpenWrite(outputFile))
        {
            const int bufferSize = 4096;
            while (inputStream.Position < inputStream.Length)
            {
                byte[] data = new byte[bufferSize];
                int amountRead = inputStream.Read(data, 0, bufferSize);
                outputStream.Write(data, 0, amountRead);

                if (progressCallback != null)
                    progressCallback(inputStream.Position, inputStream.Length);
            }
            outputStream.Flush();
        }
    }
...