2013-11-27 4 views
3

Возможно ли создать поток без фактического файла?Создать поток без файла C#

Попробую объяснить:

Я знаю, как создать поток из реального файла:

FileStream s = new FileStream("FilePath", FileMode.Open, FileAccess.Read); 

Но я могу создать FileStream с поддельным файл?

смысл:
определяют свойства, такие как имя, тип, размер, что еще нужно, чтобы какой-то файл объект (? Есть такая вещь), без содержания, только все свойства,
и после этого создать файлStream из этого «файла»? чтобы результат был похож на приведенный выше код?

Редактировать.

Я использую образец API, который имеет этот код:

 FileStream s = new FileStream("FilePath", FileMode.Open, FileAccess.Read); 
     try 
     { 
      SolFS.SolFSStream stream = new SolFS.SolFSStream(Storage, FullName, true, false, true, true, true, "pswd", SolFS.SolFSEncryption.ecAES256_SHA256, 0); 
      try 
      { 
       byte[] buffer = new byte[1024*1024]; 
       long ToRead = 0; 
       while (s.Position < s.Length) 
       { 
        if (s.Length - s.Position < 1024*1024) 
         ToRead = s.Length - s.Position; 
        else 
         ToRead = 1024 * 1024; 
        s.Read(buffer, 0, (int) ToRead); 
        stream.Write(buffer, 0, (int) ToRead); 
       } 

Так что это в основном пишет FileStream "s" где-то.
Я не хочу брать существующий файл и писать его, но я хочу «создать» другой файл без содержимого (мне не нужен контент), но чтобы иметь свойства реального файла, такие как размер , название, тип

+2

Что вы пытаетесь сделать с потоком потом? (В большинстве потоков нет «имени» и т. Д.) 'MemoryStream' * может * быть достаточно хорошим для вас, но мы не знаем, чего вы пытаетесь достичь. –

+1

Что значит? новый FileStream не требует, чтобы файл на самом деле существовал, поэтому вы можете использовать его просто отлично, чтобы создать файл. Просто используйте что-то вроде 'FileMode.Create'. – Tobberoth

+0

Почему вы не используете MemoryStream, когда вам не нужен файл, а затем, когда вы хотите сохранить его в файл, вы можете его преобразовать. Http: // StackOverflow.com/questions/18766055/copy-memorystream-to-filestream-and-save-the-file –

ответ

1

Судя по всему, вы хотите иметь FileStream (явно с его FileStream Определённые свойства, такие как Name), которые не указывают на файл.

Это, насколько мне известно, невозможно на основе реализации FileStream.

Однако создание класса-оболочки с требуемыми свойствами будет простым решением:

  • Вы можете хранить все свойства, необходимые в обертке.
  • Обертка может обертывать произвольное Stream, поэтому вы можете выбирать между FileStream, MemoryStream или любым другим типом потока.

Вот пример:

public class StreamContainer 
{ 
    public StreamContainer(string name, Stream contents) 
    { 
     if (name == null) { 
      throw new ArgumentNullException("name"); 
     } 
     if (contents == null) { 
      throw new ArgumentNullException("contents"); 
     } 

     this.name = name; 
     this.contents = contents; 
    } 

    private readonly string name; 

    public string Name { 
     get { 
      return name; 
     } 
    } 

    private readonly Stream contents; 

    public Stream Contents { 
     get { 
      return contents; 
     } 
    } 
} 

Конечно, вы могли бы добавить некоторые методы создания любезности для различных типов потоков (как статические методы в классе выше):

public static StreamContainer CreateForFile(string path) 
{ 
    return new StreamContainer(path, new FileStream(path, FileMode.Open, FileAccess.Read)); 
} 

public static StreamContainer CreateWithoutFile(string name) 
{ 
    return new StreamContainer(name, new MemoryStream()); 
} 

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

+0

Я использовал словарь giammin

Смежные вопросы