.NET에서 파일의 내용 유형을 결정하려면 어떻게해야합니까?
-
22-08-2019 - |
문제
나는 파일 이름이 주어졌으며 디스크에서 그것을 읽고 네트워크를 통해 그 내용을 보낼 수 있어야합니다. 파일이 텍스트인지 바이너리인지 여부를 결정할 수 있어야하므로 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
제휴하지 않습니다 StackOverflow