문제

나는 파일 이름이 주어졌으며 디스크에서 그것을 읽고 네트워크를 통해 그 내용을 보낼 수 있어야합니다. 파일이 텍스트인지 바이너리인지 여부를 결정할 수 있어야하므로 Streamreader 또는 BinaryReader를 사용할지 여부를 알 수 있습니다. 컨텐츠 유형을 알아야하는 또 다른 이유는 이진 인 경우 데이터를 전선으로 전송하기 전에 데이터를 인코딩해야하기 때문입니다. 또한 컨텐츠 유형이 무엇인지 소비자에게 알릴 수 있기를 원합니다 (텍스트 인 경우 인코딩 포함).

감사!

도움이 되었습니까?

해결책

그만큼 파일 이름 확장 파일의 내용 유형에 대한 최상의 힌트를 제공합니다.

완벽하지는 않지만 다음을 성공적으로 사용했습니다.

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

다른 팁

파일 유형을 미리 알고 파일이 어떤 유형인지 알 수 있습니다. 그리고 당신은 왜 당신이하고있는 모든 일이 네트워크를 통해 파일을 전송하는 경우 stream.write 및 stream.read 메소드를 사용하지 않는 이유는 무엇입니까? 서비스 소비자가 파일 유형을 결정하게하십시오. 서버의 데이터를 해석하지 않으므로 *Reader 클래스를 사용할 필요가 없습니다.

이 무료 MIME 탐지기 라이브러리를 사용해 볼 수 있습니다.http://www.netomatix.com/products/documentmanagement/mimedetector.aspx

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top