Получить имя файла из байтового массива или потока - PullRequest
21 голосов
/ 05 января 2012

Возможно ли получить имя файла из байтового массива или потока?Я не хочу сохранять файл.Я просто хочу получить имя.

Ответы [ 4 ]

41 голосов
/ 05 января 2012

Если Stream на самом деле FileStream, то этот может быть доступен путем приведения к FileStream и доступа к свойству .Name:

Stream stream = ...
FileStream fs = stream as FileStream;
if(fs != null) Console.WriteLine(fs.Name);

Однако в общем случае : нет, это недоступно. A byte[] определенно не имеет понятия имени файла, как и большинство других типов потоков. Аналогично, базовый поток FileStream, который оборачивается другими потоками (сжатие, шифрование, буферизация и т. Д.), Не будет предоставлять такую ​​информацию, несмотря на то, что базовый поток (несколько уровней ниже) является файлом.

Я бы обработал имя файла отдельно.

14 голосов
/ 05 января 2012

Нет, это невозможно (хорошо, так что это может быть возможно в классе FileStream, узнавать что-то новое каждый день!).

Массив или поток байтов представляет содержимое файла, а не Windows метаданные о файле.

Существует множество простых способов сохранить эту информацию, но, не зная больше о вашей ситуации, я не могу предложить решение.

4 голосов
/ 05 января 2012

Вся информация о файле (например, имя, расширение и т. Д.) Является частью метаданных для реального файла.Массив байтов будет содержать только фактические данные.Это может быть возможно, если сам байтовый массив содержит метаданные (например, файл xml) ... однако вам необходимо знать тип и, в частности, где искать.

0 голосов
/ 16 сентября 2018

Вы не сможете получить имя файла из байтового массива.Вместо этого вам нужен filestream, чтобы получить имя файла.Байтовый массив не хранит имя.

...