2009-02-11 6 views
3

On me donne un nom de fichier et je dois pouvoir le lire à partir du disque et envoyer son contenu sur un réseau. Je dois être capable de déterminer si le fichier est en format texte ou binaire, donc je sais s'il faut utiliser StreamReader ou BinaryReader. Une autre raison pour laquelle j'ai besoin de connaître le type de contenu est que si c'est un binaire, je dois encoder les données MIME avant de les envoyer sur le réseau. J'aimerais aussi pouvoir dire au consommateur quel est le type de contenu (y compris l'encodage s'il s'agit de texte).Comment puis-je déterminer le type de contenu d'un fichier dans .NET?

Merci!

Répondre

2

Le filename extension fournit votre meilleur indice sur le type de contenu d'un fichier.

Ce n'est pas parfait, mais je l'ai utilisé ce qui suit avec un certain succès:

private static string GetContentTypeFromRegistry(string file) 
{ 
    RegistryKey contentTypeKey = Registry.ClassesRoot.OpenSubKey(@"MIME\Database\Content Type"); 

    foreach (string keyName in contentTypeKey.GetSubKeyNames()) 
    { 
     if (System.IO.Path.GetExtension(file).ToLower().CompareTo((string)contentTypeKey.OpenSubKey(keyName).GetValue("Extension")) == 0) 
     { 
      return keyName; 
     } 
    } 

    return "unknown"; 
} 

private static string GetFileExtensionFromRegistry(string contentType) 
{ 
    RegistryKey contentTypeKey = Registry.ClassesRoot.OpenSubKey(@"MIME\Database\Content Type\" + contentType); 

    if (contentTypeKey != null) 
    { 
     string extension = (string)contentTypeKey.GetValue("Extension"); 

     if (extension != null) 
     { 
      return extension; 
     } 
    } 

    return String.Empty; 
} 
1

Vous devez connaître le type de fichier à l'avance ou savoir de quel type il s'agit. Et pourquoi n'utilisez-vous pas simplement les méthodes Stream.Write et Stream.Read si tout ce que vous faites est d'envoyer le fichier sur un réseau? Laissez le consommateur du service déterminer le type de fichier. Vous n'avez pas besoin d'utiliser les classes * Reader car vous n'interprétez pas les données sur votre serveur.

+0

En raison de certaines contraintes, je ne peux pas envoyer le fichier sur le réseau en tant que données binaires. Si c'est un fichier binaire, je dois l'encoder en MIME, s'il s'agit d'un fichier texte, je l'enverrai tel quel. C'est pourquoi j'ai besoin de connaître le type de contenu. –

Questions connexes