Question

Je 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 en mesure de déterminer si le fichier est un texte ou binaire, donc je sais que si vous souhaitez utiliser un StreamReader ou BinaryReader. Une autre raison pour laquelle j'ai besoin de connaître le type de contenu est parce que si elle est binaire, je dois MIME coder les données avant de l'envoyer sur le fil. Je voudrais aussi être en mesure de dire au consommateur ce que le type de contenu est (y compris l'encodage si elle est un texte).

Merci!

Était-ce utile?

La solution

fournit votre meilleur indice au type de contenu d'un fichier.

Il 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;
}

Autres conseils

Soit vous devez connaître le type de fichier à l'avance, ou être dit de quel type est le fichier. Et pourquoi ne pas simplement utiliser les méthodes Stream.Write et Stream.Read si tout ce que vous faites est d'envoyer le fichier sur un réseau? Que le consommateur du service déterminent le type de fichier. Vous n'avez pas besoin d'utiliser les classes Reader * puisque vous n'êtes pas interpréter les données sur votre serveur.

Vous pouvez essayer cette bibliothèque de détecteur de mime sans sortir. http://www.netomatix.com/Products/DocumentManagement/MimeDetector.aspx

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top