मैं C# का उपयोग कर फ़ाइल का प्रकार कैसे प्राप्त कर सकता हूं। उदाहरण के लिए यदि फ़ाइल नाम आईडी "abc.png" और फ़ाइल का प्रकार "पीएनजी छवि" विंडो एक्सप्लोरर में तीसरे कॉलम "टाइप" के समान होगा।फ़ाइल प्रकार प्राप्त करें .NET
उत्तर
आप खिड़कियों एपीआई SHGetFileInfo function
उपयोग करने के लिए उत्पादन संरचना में की आवश्यकता होगी, szTypeName नाम आप देख रहे हैं शामिल हैं।
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]
public struct SHFILEINFO
{
public IntPtr hIcon;
public int iIcon;
public uint dwAttributes;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
public string szDisplayName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]
public string szTypeName;
};
ध्यान दें कि यह केवल वर्तमान "दोस्ताना नाम" Windows रजिस्ट्री में संग्रहीत के रूप में है, यह सिर्फ एक लेबल है (लेकिन शायद अपनी स्थिति के लिए काफी अच्छा है)।
szTypeName और szDisplayName के बीच का अंतर MSDN पर वर्णित है:
szTypeName: अशक्त-समाप्त स्ट्रिंग कि फ़ाइल के प्रकार का वर्णन है।
szDisplayName: अशक्त-समाप्त स्ट्रिंग यह विंडोज खोल में प्रकट होता है, या फ़ाइल कि फ़ाइल का प्रतिनिधित्व आइकन होता है का पथ और नाम के रूप में फ़ाइल का नाम मौजूद है।
फ़ाइल प्रकार के अधिक सटीक निर्धारण के लिए आपको प्रत्येक फ़ाइल के बाइट्स के पहले हिस्से को पढ़ने और प्रकाशित फ़ाइल विनिर्देशों के विरुद्ध तुलना करने की आवश्यकता होगी। फ़ाइल स्वरूपों की जानकारी के लिए Wotsit जैसी साइट देखें।
लिंक किए गए पृष्ठ में पूर्ण उदाहरण C# कोड भी शामिल है।
पी/SHGetFileInfo पर आक्रमण करें, और लौटाई गई संरचना में szDisplayName की जांच करें। नतीजा इस बात पर निर्भर करेगा कि आपके फाइल प्रकार किस प्रकार परिभाषित हैं (यानी यह एक पूर्ण संदर्भ नहीं होगा)। लेकिन ज्यादातर मामलों में यह ठीक होना चाहिए। Click here for the c# signature of SHGetFileInfo and example code on pinvoke.net (यह भयानक साइट है)
एक पूर्ण संदर्भ के लिए आपको बाइनरी हेडर में कुछ बाइट्स की जांच करने की आवश्यकता होगी और इन बाइट्स की एक ज्ञात सूची के विरुद्ध तुलना की जाएगी - मुझे लगता है कि यह यूनिक्स-आधारित सिस्टम कैसे करता है डिफ़ॉल्ट रूप से।
इस प्रकार यूनिक्स पर 'file' उपयोगिता यह करता है, हां। –
विन-एपीआई फ़ंक्शन SHGetFileInfo() आपका मित्र है। कुछ कोड स्निपेट के लिए here देखें।
फ़ाइल प्रकार की जानकारी प्राप्त करने के लिए आपको SHGetFileInfo पर P/Invoke करने की आवश्यकता होगी। यहां एक पूर्ण नमूना है:
using System;
using System.Runtime.InteropServices;
static class NativeMethods
{
[StructLayout(LayoutKind.Sequential)]
public struct SHFILEINFO
{
public IntPtr hIcon;
public int iIcon;
public uint dwAttributes;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
public string szDisplayName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]
public string szTypeName;
};
public static class FILE_ATTRIBUTE
{
public const uint FILE_ATTRIBUTE_NORMAL = 0x80;
}
public static class SHGFI
{
public const uint SHGFI_TYPENAME = 0x000000400;
public const uint SHGFI_USEFILEATTRIBUTES = 0x000000010;
}
[DllImport("shell32.dll")]
public static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, uint cbSizeFileInfo, uint uFlags);
}
class Program
{
public static void Main(string[] args)
{
NativeMethods.SHFILEINFO info = new NativeMethods.SHFILEINFO();
string fileName = @"C:\Some\Path\SomeFile.png";
uint dwFileAttributes = NativeMethods.FILE_ATTRIBUTE.FILE_ATTRIBUTE_NORMAL;
uint uFlags = (uint)(NativeMethods.SHGFI.SHGFI_TYPENAME | NativeMethods.SHGFI.SHGFI_USEFILEATTRIBUTES);
NativeMethods.SHGetFileInfo(fileName, dwFileAttributes, ref info, (uint)Marshal.SizeOf(info), uFlags);
Console.WriteLine(info.szTypeName);
}
}
यह उत्तर स्वीकार्य उत्तर होना चाहिए, क्योंकि यह भी दिखाता है कि इसका उपयोग कैसे किया जाए, वर्तमान स्वीकृत उत्तर से काफी बेहतर है। +1 – Kaitlyn
हालांकि, यह वास्तव में काम नहीं करता है, जब मैंने फ़ाइल को txt से png प्रारूप में बदल दिया है, तो यह मुझे बताता है कि यह एक पीएनजी प्रारूप फ़ाइल है। अनुमोदित, फ़ाइल स्टेग्नोग्राफ़ी प्रक्रिया के माध्यम से चला गया था, और उस प्रक्रिया का उपयोग करके निकाला गया था, लेकिन एन्क्रिप्टेड था। – Kaitlyn
धन्यवाद, बहुत अच्छा काम किया! –
- 1. सम्मिलित करें प्रकार .NET
- 2. Excel प्राप्त करें। .NET
- 3. मैक ओएस एक्स पर फ़ाइल का प्रकार कैसे प्राप्त करें?
- 4. बाइट से फ़ाइल प्रकार एक्सटेंशन कैसे प्राप्त करें [] (ब्लॉब)
- 5. इनपुट प्रकार फ़ाइल का मान प्राप्त करें, और अगर
- 6. Qt में फ़ाइल का MIME प्रकार कैसे प्राप्त करें?
- 7. सामग्री प्रकार से फ़ाइल एक्सटेंशन कैसे प्राप्त करें?
- 8. .NET में प्रिंटर जानकारी कैसे प्राप्त करें?
- 9. lambda पैरामीटर प्रकार प्राप्त करें
- 10. फ़ाइल एक्सटेंशन प्राप्त करें
- 11. फ़ाइल प्राप्त करें piracy
- 12. फ़ाइल प्रकार कैसे निर्धारित करें?
- 13. .NET Application_BeginRequest - उपयोगकर्ता संदर्भ कैसे प्राप्त करें?
- 14. Node.js - फ़ाइल सिस्टम फ़ाइल प्रकार
- 15. .NET प्रतिबिंब: प्रयुक्त प्रकार खोजें
- 16. मैं सी # में सामान्य फ़ाइल प्रकार आइकन कैसे प्राप्त करूं?
- 17. .NET 4.0 प्रकार
- 18. सामान्य फ़ाइल प्रकार के लिए फ़ाइल एक्सटेंशन की सूची कैसे प्राप्त करें?
- 19. फ़ाइल सिस्टम प्रतिबंध प्राप्त करें
- 20. सी # .NET में डीपीआई कैसे प्राप्त करें?
- 21. सी # .NET: व्यवस्थापक अधिकार प्राप्त करें?
- 22. HTML से सादा पाठ प्राप्त करें .NET
- 23. .NET: सभी Outlook कैलेंडर आइटम प्राप्त करें
- 24. .NET आकार बदलें: पुराना आकार प्राप्त करें?
- 25. फास्ट .NET Http अनुरोध कैसे प्राप्त करें
- 26. .NET DLL फ़ाइल से पीडीबी उत्पन्न करें?
- 27. .NET 4.5 HttpTaskAsyncHandler फ़ाइल अपलोड करें
- 28. वास्तविक प्रकार का वास्तविक प्रकार कैसे प्राप्त करें?
- 29. फ़ाइल प्रकार
- 30. फ़ाइल प्रकार
आप अपनी पोस्ट को सही करना चाहेंगे - szTypeName में जानकारी है, szDisplayName नहीं। Http://msdn.microsoft.com/en-us/library/aa453689.aspx => szDisplayName देखें: नल-टर्मिनेटेड स्ट्रिंग जिसमें फ़ाइल का नाम होता है जैसा कि यह विंडोज शैल में दिखाई देता है, या पथ और नाम फ़ाइल जिसमें फ़ाइल का प्रतिनिधित्व करने वाला आइकन शामिल है। – bobbymcr
@bobbymcr, हो गया, टिप्पणी के लिए धन्यवाद। – Ash