Создайте Поток, не имея физического файла для создания из

Я должен создать zip-файл, содержащий документы, которые существуют на сервере. Я использую класс.Net Package, чтобы сделать так и создать новый Пакет (который является zip-файлом), у меня должны быть или путь к физическому файлу или поток. Я пытаюсь не создать фактический файл, который был бы zip-файлом, вместо этого просто создать поток, который существовал бы в памяти или чем-то.

Мой вопрос состоит в том, как Вы инстанцируете нового Потока (т.е. FileStream, MemoryStream, и т.д.), не имея физического файла для инстанцирования от.

20
задан jhorton 12 April 2010 в 15:05
поделиться

3 ответа

MemoryStream имеет несколько перегрузок конструктора , ни одна из которых не требует файла.

32
ответ дан 29 November 2019 в 23:40
поделиться

Пример того, как это сделать, есть на странице MSDN для MemoryStream:

using System;
using System.IO;
using System.Text;

class MemStream
{
    static void Main()
    {
        int count;
        byte[] byteArray;
        char[] charArray;
        UnicodeEncoding uniEncoding = new UnicodeEncoding();

        // Create the data to write to the stream.
        byte[] firstString = uniEncoding.GetBytes(
            "Invalid file path characters are: ");
        byte[] secondString = uniEncoding.GetBytes(
            Path.GetInvalidPathChars());

        using(MemoryStream memStream = new MemoryStream(100))
        {
            // Write the first string to the stream.
            memStream.Write(firstString, 0 , firstString.Length);

            // Write the second string to the stream, byte by byte.
            count = 0;
            while(count < secondString.Length)
            {
                memStream.WriteByte(secondString[count++]);
            }

            // Write the stream properties to the console.
            Console.WriteLine(
                "Capacity = {0}, Length = {1}, Position = {2}\n",
                memStream.Capacity.ToString(),
                memStream.Length.ToString(),
                memStream.Position.ToString());

            // Set the position to the beginning of the stream.
            memStream.Seek(0, SeekOrigin.Begin);

            // Read the first 20 bytes from the stream.
            byteArray = new byte[memStream.Length];
            count = memStream.Read(byteArray, 0, 20);

            // Read the remaining bytes, byte by byte.
            while(count < memStream.Length)
            {
                byteArray[count++] =
                    Convert.ToByte(memStream.ReadByte());
            }

            // Decode the byte array into a char array
            // and write it to the console.
            charArray = new char[uniEncoding.GetCharCount(
                byteArray, 0, count)];
            uniEncoding.GetDecoder().GetChars(
                byteArray, 0, count, charArray, 0);
            Console.WriteLine(charArray);
        }
    }
}

Это то, что вы ищете?

8
ответ дан 29 November 2019 в 23:40
поделиться

Вы можете создать новый поток и писать в него. Для создания объекта не нужен файл.

http://msdn.microsoft.com/en-us/library/system.io.memorystream.aspx

Метод записи:

http://msdn.microsoft.com/en-us/library/system.io.memorystream.write.aspx

Конструкторы для потока памяти:

http://msdn.microsoft.com/en-us/library/system.io.memorystream.memorystream.aspx

3
ответ дан 29 November 2019 в 23:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: