आप कुछ इंटरॉप कोड के साथ ऐसा कर सकते हैं:
[DllImport("shlwapi.dll", CharSet = CharSet.Unicode)]
[return: MarshalAsAttribute(UnmanagedType.Bool)]
public static extern bool PathIsDirectory([MarshalAsAttribute(UnmanagedType.LPWStr), In] string pszPath);
आगे कुछ टिप्पणियों को स्पष्ट करने के लिए ...
इस में अप्रबंधित कोड का परिचय किसी भी अधिक inherintly अन्य में से किसी की तुलना में खतरनाक नहीं है फ़ाइल या I/O संबंधित कॉल .NET में हैं क्योंकि वे ultimatley सभी अप्रबंधित कोड में कॉल करते हैं।
यह स्ट्रिंग का उपयोग कर एक एकल फ़ंक्शन कॉल है। आप इस फ़ंक्शन को कॉल करके कोई भी नया डेटा प्रकार और/या स्मृति उपयोग शुरू नहीं कर रहे हैं। हां, आपको अप्रबंधित कोड पर उचित रूप से साफ करने के लिए भरोसा करने की आवश्यकता है, लेकिन आखिरकार आप I/O संबंधित कॉलों पर निर्भरता रखते हैं।
संदर्भ के लिए, परावर्तक से File.GetAttributes (स्ट्रिंग पथ) को कोड है:
public static FileAttributes GetAttributes(string path)
{
string fullPathInternal = Path.GetFullPathInternal(path);
new FileIOPermission(FileIOPermissionAccess.Read, new string[] { fullPathInternal }, false, false).Demand();
Win32Native.WIN32_FILE_ATTRIBUTE_DATA data = new Win32Native.WIN32_FILE_ATTRIBUTE_DATA();
int errorCode = FillAttributeInfo(fullPathInternal, ref data, false, true);
if (errorCode != 0)
{
__Error.WinIOError(errorCode, fullPathInternal);
}
return (FileAttributes) data.fileAttributes;
}
जैसा कि आप देख, यह भी अप्रबंधित कोड के लिए बुला रहा है क्रम में फ़ाइल विशेषताओं को पुनः प्राप्त करने सकते हैं, इसलिए अप्रबंधित कोड को खतरनाक होने के बारे में बहस अवैध हैं। इसी प्रकार, प्रबंधित कोड में पूरी तरह से रहने के बारे में तर्क। ऐसा करने के लिए कोई प्रबंधित कोड कार्यान्वयन नहीं है। यहां तक कि अन्य उत्तरों के रूप में File.GetAttributes() को कॉल करने के लिए भी असम्बद्ध कोड को कॉल करने के समान "मुद्दे" हैं और मेरा मानना है कि पथ एक निर्देशिका है या नहीं, यह निर्धारित करने के लिए यह अधिक विश्वसनीय तरीका है।
संपादित करें @ क्रिस्टियन के द्वारा सीएएस के बारे में टिप्पणी का उत्तर देने के लिए। मेरा मानना है कि GetAttributes सुरक्षा मांग को एकमात्र कारण बनाता है क्योंकि इसे फ़ाइल के गुणों को पढ़ने की आवश्यकता है, इसलिए यह सुनिश्चित करना चाहता है कि कॉलिंग कोड को ऐसा करने की अनुमति है। यह अंतर्निहित ओएस चेक (यदि कोई है) के समान नहीं है। आप हमेशा पथ/निर्देशक कॉल के चारों ओर एक रैपर फ़ंक्शन बना सकते हैं, जो पथ आईडी डायरेक्टरी पर है, यदि आवश्यक हो तो कुछ सीएएस अनुमतियों की भी मांग करें।
http://stackoverflow.com/a/17198139/128506 की – HAL9000
संभावित डुप्लिकेट (http://stackoverflow.com/questions/1395205/better-way-to-check-if-a-path-is-a-file-or-a- निर्देशिका) – DavidRR