Frage

Ich bin ein Dateiname angegeben, und ich habe in der Lage sein es von der Festplatte zu lesen und seinen Inhalt über ein Netzwerk zu senden. Ich muss in der Lage zu bestimmen, ob die Datei Text oder binär ist, damit ich weiß, ob ein Stream oder Binary zu verwenden. Ein weiterer Grund, warum ich brauche, um den Inhaltstyp kennen, denn wenn es binär ist, muss ich MIME die Daten kodieren, bevor sie über den Draht zu senden. Ich würde auch in der Lage sein mag, den Verbraucher zu sagen, was der Inhaltstyp ist (einschließlich der Codierung, wenn es Text).

Danke!

War es hilfreich?

Lösung

Die Dateinamenerweiterung an der Art des Inhalts einer Datei der besten Hinweis bereitstellt.

Es ist nicht perfekt, aber ich habe folgend mit einigem Erfolg:

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

Andere Tipps

Sie müssen entweder die Art der Datei im voraus wissen, oder erzählt werden, welche Art der Datei ist. Und warum Sie nicht nur die Methoden Stream.Write und Stream.Read verwenden, wenn alles, was Sie tun, um die Datei über ein Netzwerk sendet? Lassen Sie die Verbraucher der Service den Dateityp bestimmen. Sie brauchen nicht die * Reader-Klassen zu verwenden, da Sie nicht auf die Daten auf dem Server zu interpretieren sind.

Sie können versuchen, diese kostenlose Mime Detektor Bibliothek aus. http://www.netomatix.com/Products/DocumentManagement/MimeDetector.aspx

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top