2012-04-09 6 views
9

उत्तर देने से पहले कृपया पूरी तरह से और ध्यान से पढ़ें। जवाब उतना आसान नहीं है जितना दिख सकता है।.NET में टाइमज़ोन की परवाह किए बिना, मुझे FAT32 फ़ाइल का सही संशोधित डेटाटाइम कैसे प्राप्त हो सकता है?

मैं एक प्रोग्राम लिख रहा हूं जिसे संशोधित डेटाटाइम फ़ाइलों का ट्रैक रखने की आवश्यकता है, जिनमें से कुछ बाहरी FAT32 ड्राइव पर संग्रहीत हैं। कार्यक्रम विभिन्न विंडोज 7 मशीनों पर चलाया जा रहा है।

समस्या यूटीसी संशोधित डेटाटाइम परिवर्तन है जब वर्तमान यूटीसी ऑफ़सेट बदलता है। विशेष रूप से, जब हम न्यूजीलैंड मानक समय (यूटीसी +12) से न्यूज़ीलैंड डेलाइट टाइम (यूटीसी + 13) में जाते हैं और फिर वापस आते हैं। यह एक टाइपो नहीं है - यूटीसी संशोधित डेटाटाइम परिवर्तन। यह नहीं होना चाहिए, यह यूटीसी का मुद्दा है, लेकिन यह करता है। यह FAT32 फ़ाइल सिस्टम की एक सीमा प्रतीत होता है - NTFS पर फ़ाइलें ठीक काम करती हैं।

Console.WriteLine(DateTime.Now.ToString() + (DateTime.Now.IsDaylightSavingTime() ? " Daylight" : " Standard")); 
Console.WriteLine(new FileInfo(args[0]).LastWriteTimeUtc.ToString("yyyyMMdd HH mmss")); 

सिस्टम टाइमज़ोन न्यूजीलैंड है और सिस्टम की तारीख 9 अप्रैल 2012 है जो न्यूज़ीलैंड मानक समय है।

C:\Dev\UtcModifiedDatetime\bin\Debug>UtcModifiedDatetime.exe M:\Test1\Test.txt 
2012-04-09 3:53:46 pm Standard 
20120409 03 5316 

अब सिस्टम तिथि 1 मार्च 2012 को सेट करें जो न्यूज़ीलैंड डेलाइट टाइम है। ध्यान दें कि मैंने उस निर्देशिका का नाम बदल दिया है जिसमें परीक्षण फ़ाइल है। यह महत्वपूर्ण है क्योंकि अन्यथा विंडोज़ फ़ाइल के संशोधित डेटाटाइम को कैश करेगा। इससे पहले कि मैंने इसे समझ लिया, मैंने बहुत समय बर्बाद कर दिया।

C:\Dev\UtcModifiedDatetime\bin\Debug>UtcModifiedDatetime.exe M:\Test2\Test.txt 
2012-03-01 3:54:13 pm Daylight 
20120409 02 5316 

अब प्रणाली की तारीख वापस 9 अप्रैल 2012 के सेट और एडिलेड (UTC + 09: 30) को समय क्षेत्र बदलने के।

C:\Dev\UtcModifiedDatetime\bin\Debug>UtcModifiedDatetime.exe M:\Test3\Test.txt 
2012-04-09 1:27:21 pm Standard 
20120409 06 2316 

तो मैं सही संशोधित डेटाटाइम कैसे प्राप्त कर सकता हूं? मैं कोशिश कर सकता हूं और यह पता लगा सकता हूं कि फ़ाइल एक FAT32 फ़ाइल सिस्टम पर है और यदि डेलाइट सेविंग टाइम एक घंटे का समायोजन करता है, लेकिन अगर मैं इसे काम करने के लिए भी प्राप्त कर सकता हूं तो यह एक भयानक बदसूरत हैक होगा। निम्न स्तर के सिस्टम कॉल काम का उपयोग करेंगे (मुझे संदेह नहीं है क्योंकि समस्या ओएस स्तर पर प्रतीत होती है)? क्या मैं पूरी मशीन पर इसे बदलने के बिना प्रक्रिया का टाइमज़ोन बदल सकता हूं? क्या कोई और तरीका है?

+0

इस समस्या के लिए एक संभावित समाधान एक फ़ाइल के LastWriteTimeUtc का उपयोग नहीं करना चाहिए, लेकिन दो फ़ाइलों के LastWriteTimeUtc का अंतर नहीं हो सकता है। यदि "c: \ a.txt" और "c: \ b.txt" का अंतर "\\ बैकअप \ a.txt" और "\\ बैकअप \ b.txt" के अंतर से अलग है, तो LastWriteTimeUtc पर कम से कम एक फ़ाइल अलग है। – user1027167

+0

ऐसा लगता है कि आप वास्तव में जानना चाहते हैं कि फ़ाइल आखिरी बार से अलग है या नहीं। अगर वे बड़े नहीं हैं, तो आप उन्हें हर्ष कर सकते हैं। इसके अतिरिक्त, टाइमस्टैम्प वास्तव में सही समाधान नहीं हैं, क्योंकि यदि आप फ़ाइल पढ़ते हैं तो दौड़-परिस्थितियां होती हैं और यह एक ही समय क्वांट के दौरान अपडेट की जाती है। – rsaxvc

उत्तर

8

समस्या है, FAT32 filesystem stores file time as a local time। इस प्रकार यूटीसी समय एक गणना समय है जो डीएसटी को खाते में ले जाता है, जिसके परिणामस्वरूप एक अलग यूटीसी समय होता है। आम तौर पर यह समस्या बहुत जटिल है, यह असफल है।

उदाहरण के लिए आपको एक अलग फ़ाइल में वास्तविक यूटीसी फ़ाइल संशोधन समय को स्टोर करने की आवश्यकता होगी, जिसे बाहरी ड्राइव हटा दिए जाने से पहले प्रत्येक मशीन पर सिंक्रनाइज़ किया जाना चाहिए। यदि सिंक कम से कम एक बार पूर्ववत नहीं किया जाएगा, तो इसे सही नहीं माना जा सकता है। और उपयोगकर्ताओं को लागू करने का कोई आसान तरीका नहीं है।

+6

ओएमजी जो इतना बेकार (एफएटी 32) बेकार है। जानकारी के लिए धन्यवाद। – TallGuy

+2

@TallGuy: FAT32 सिस्टम * प्रारूप * मूल * आईबीएम पीसी के दिनों से अनिवार्य रूप से अपरिवर्तित प्रारूप में निर्देशिका प्रविष्टियों को संग्रहीत करता है।यह देखते हुए कि युग के अधिकांश माइक्रोक्रॉम्प्यूटरों में कोई सटीक घड़ी नहीं थी, और यहां तक ​​कि पीसी को संचालित होने के दौरान दिनांक और समय को बनाए रखने का कोई तरीका नहीं था, समय-क्षेत्र से संबंधित कार्यक्षमता कुछ भी नहीं बल्कि उपद्रव ज्यादातर उपयोगकर्ता – supercat

संबंधित मुद्दे