Разрешено ли повторное использование потока в C#? - PullRequest
1 голос
/ 19 февраля 2020

Вот мой код.

using (FileStream zipToOpen = new FileStream(@"D:\test\1.txt", FileMode.Open))
            {
                using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Update))
                {
                    ZipArchiveEntry readmeEntry = archive.CreateEntry("Readme.txt");
                    using (StreamWriter writer = new StreamWriter(readmeEntry.Open()))
                    {
                        writer.WriteLine("Information about this package.");
                        writer.WriteLine("========================");
                    }
                }

                // I reused this stream again and below code just a sample.
                // It would get exception
                using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Update))
                {
                    //System.ArgumentException: 'Update mode requires a stream with read, write, and seek capabilities.'
                }
            }

Это исключение вызвано тем, что «поток не может быть возобновлен в C#»? Если ответ «да», любые офисные документы могут позволить мне взять ссылку?

Заранее благодарен, если ваши ребята могут оказать некоторую помощь.

1 Ответ

1 голос
/ 19 февраля 2020

По умолчанию ZipArchive предполагает управление временем жизни Stream, которое он передает, и утилизирует его, когда оно утилизируется. Чтобы избежать этого, установите leaveOpen в true в перегрузках конструктора. Однако: вам также, вероятно, потребуется перемотать поток между использованиями, поэтому вам понадобится zipToOpen.Position = 0; между двумя using блоками. Как ни странно, маловероятно , что 1.txt является zip-файлом, но ... я думаю, это может быть!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...