2012-01-05 3 views

ответ

31

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

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

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

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

+0

+1 Никогда не заметили это свойство раньше, хотя я вряд ли когда-либо его использую lol –

+0

Привет @Marc, спасибо за ваше прекрасное объяснение. Я попытаюсь опубликовать результат. – Gus

+0

Привет, В wcf я возвращаю FileStream, но у клиента я получаю MessageBodyStream. Какие-либо предложения? – Gus

14

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

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

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

+0

Привет @ Адам, я понимаю. Спасибо за вашего помощника. – Gus

4

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

+0

Привет @Code, Спасибо за вашего помощника. – Gus

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