web-dev-qa-db-fra.com

Obtenir le nom du fichier à partir d'un tableau d'octets ou d'un flux

Est-il possible d’obtenir un nom de fichier à partir d’un tableau ou d’un flux d’octets? Je ne souhaite pas enregistrer le fichier. Je veux juste récupérer le nom.

21
Gus

Si la Stream est en fait une FileStream, alors peut être disponible en attribuant la valeur à FileStream et en accédant à la propriété .Name:

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

Cependant, dans le cas général : non, ceci n'est pas disponible. Un byte[]certainement n'a aucun concept de nom de fichier, pas plus que la plupart des autres types de flux. De même, un flux de base FileStream encapsulé par d'autres flux (compression, cryptage, mise en mémoire tampon, etc.) n'exposera pas ces informations, bien que le flux sous-jacent (plusieurs couches inférieures) soit un fichier.

Je voudrais gérer le nom de fichier séparément.

39
Marc Gravell

Non, ce n'est pas possible (d'accord, cela pourrait être possible dans la classe FileStream, apprenez quelque chose de nouveau chaque jour!). 

Un tableau ou un flux d'octets représente lecontenudu fichier, pas le Windowsmétadonnéesdu fichier.

Il existe de nombreux moyens simples de conserver ces informations, mais je ne peux pas en savoir plus sur votre situation et je ne peux pas vous proposer de solution.

14
Adam Houldsworth

Toutes les informations de fichier (telles que le nom, l'extension, etc.) font partie des métadonnées d'un fichier réel. Le tableau d'octets ne contiendra que les données réelles. Cela peut être possible si le tableau d'octets contient lui-même des métadonnées (exemple, un fichier xml) ... Cependant, vous devez connaître le type et plus particulièrement l'emplacement de recherche.

4

Vous ne pourrez pas obtenir le nom de fichier d'un tableau d'octets. Au lieu de cela, vous avez besoin de filestream pour obtenir le nom du fichier. Le tableau d'octets ne stocke pas le nom.

0
Abdus Salam Azad