मैं एक साधारण फ़ंक्शन बना रहा हूं जो एक यादृच्छिक फ़ाइल बनाता है। थ्रेड सुरक्षित होने के लिए, यह फ़ाइल को पुनः प्रयास लूप में बनाता है और यदि फ़ाइल मौजूद है तो यह फिर से प्रयास करती है।क्या .NET मानक हर प्लेटफॉर्म पर HResult मानों को सामान्यीकृत करता है?
while (true)
{
fileName = NewTempFileName(prefix, suffix, directory);
if (File.Exists(fileName))
{
continue;
}
try
{
// Create the file, and close it immediately
using (var stream = new FileStream(fileName, FileMode.CreateNew, FileAccess.Write, FileShare.Read))
{
break;
}
}
catch (IOException e)
{
// If the error was because the file exists, try again
if ((e.HResult & 0xFFFF) == 0x00000050)
{
continue;
}
// else rethrow it
throw;
}
}
MSDN के अनुसार, HRESULT मूल्य COM जो इंगित करने के लिए यह केवल विंडोज पर काम करेंगे प्रतीत होता है से ली गई है, और यह specifically lists them as "Win32 codes"। लेकिन यह एक पुस्तकालय में है जो .NET मानक को लक्षित करता है और आदर्श रूप से इसे every platform .NET Standard supports पर काम करना चाहिए।
मुझे क्या आश्चर्य है कि क्या मैं उपर्युक्त दृष्टिकोण पर भरोसा कर सकता हूं कि एचआरसल्ट से मूल्य का उपयोग क्रॉस-प्लेटफॉर्म होने के लिए किया जाता है? documentation इस बिंदु पर स्पष्ट नहीं है।
यदि नहीं, तो मैं कैसे निर्धारित करूं कि अन्य प्लेटफार्मों पर एचआरसल्ट मूल्यों की अपेक्षा क्या है?
नोट: एक समान प्रश्न Does .NET define common HRESULT values? नहीं है, लेकिन नेट मानक (और नेट के लिए पार मंच समर्थन) से पहले ही अस्तित्व में यह कहा गया था, इसलिए मैं इस उद्देश्य के लिए है कि इसका जवाब पर भरोसा नहीं कर सकते हैं।
अभी के लिए, हमारे codebase केवल उपयोग करता है:
- 0x00000020 - ERROR_SHARING_VIOLATION
- 0x00000021 - ERROR_LOCK_VIOLATION
- 0x00000050 - ERROR_FILE_EXISTS
हम नेट स्टैंडर्ड 1.5 लक्षित कर रहे हैं।
नोट: स्वीकार किए जाते हैं जवाब संतुष्ट करता जबकि क्या मैं यहाँ से पूछा, मैं एक अनुवर्ती प्रश्न How do I make catching generic IOExceptions reliably portable across platforms?
मैं तुम्हें परिदृश्य या विशिष्ट त्रुटि कोड आप पर भरोसा करते हैं करना चाहते हैं के बारे में अधिक विशिष्ट होना .. ऐसे कई स्थानों सूचियों गए हैं लगता है पूर्वनिर्धारित कोडों का उपयोग किया जाता है (आप कोरसीएलआर और फुलफैक्स संदर्भ स्रोत कोड दोनों में 'hresults.cs' की खोज कर सकते हैं) और कुछ मामलों के लिए सामान्यीकरण कार्य होते हैं [जैसे फ़ाइल त्रुटियों के लिए] [https://github.com/dotnet /coreclr/blob/5c07c5aa98f8a088bf25099f1ab2d38b59ea5478/src/pal/src/file/file.cpp#L184-L194)। –
धन्यवाद मार्टिन। मैंने 3 त्रुटियों को जोड़ा जो मुझे वर्तमान में रूचि है। हालांकि, थोड़ी अधिक सामान्य उत्तर की उम्मीद थी। आम तौर पर, हम केवल फाइल आईओ त्रुटियों में रुचि रखते हैं। – NightOwl888
आप msdn के बजाय [इस दस्तावेज़] [https://docs.microsoft.com/en-us/dotnet/api/system.exception.hresult?view=netstandard-1.5) से लिंक करना चाहेंगे क्योंकि यह है आधिकारिक .NET मानक 1.5 एपीआई दस्तावेज़। (निश्चित रूप से यह एमएसडीएन की एक प्रतिलिपि और पेस्ट है, लेकिन सही जगह पर इंगित करना अच्छा है) –