मैं ऐसे प्रोग्राम पर काम कर रहा हूं जो फाइलों से दिनांक मेटाडेटा रिकॉर्ड करता है, जैसे सृजन समय, अंतिम संशोधित समय इत्यादि। कार्यक्रम का एक पुराना संस्करण वीबीए में लिखा गया है, और सवाल में फ़ाइल के लिएIO.File.GetLastAccessTime एक घंटे से बंद है
Public Function GetFileLastAccessTime(ByVal FilePath As String) As Date
Dim fso As New Scripting.FileSystemObject
Dim f As Scripting.File
Set f = fso.GetFile(FilePath)
GetFileLastAccessTime = f.DateLastAccessed
End Function
आउटपुट:: कुछ इस तरह करता है
?getfilelastaccesstime("SomePath")
7/30/2010 2:16:07 PM
मूल्य मैं Windows पलीता में फ़ाइल गुणों से मिलता है। ख़ुशी।
मैं इस कार्यक्षमता को VB.Net ऐप पर पोर्ट कर रहा हूं। नया कोड:
Public Function GetLastAccessTime(ByVal FilePath As String) As Date
Return IO.File.GetLastAccessTime(FilePath)
End Function
सरलता स्वयं ही। आउटपुट:
?GetLastAccessTime("SomePath")
#7/30/2010 3:16:07 PM#
एक घंटे बाद।
दोनों कार्य एक ही मशीन पर चल रहे हैं, उसी फ़ाइल को जांच रहे हैं। मैंने एक ही परिणाम के साथ IO.FileInfo कक्षा का उपयोग करने का भी प्रयास किया है। मैंने हजारों फाइलों की जांच की है और वे सभी एक घंटे से दूर हैं। निर्माण समय और अंतिम संशोधित समय के लिए अन्य दिनांक गुण भी एक घंटे से बंद हैं।
सहायता!
मैं मूल पोस्ट में उल्लेख करना भूल गया, कंप्यूटर का समय क्षेत्र सीएसटी है, और डेलाइट बचत समय वर्तमान में प्रभावी नहीं है।
मैंने विंडोज 7 64 बिट और विंडोज एक्सपी 32 बिट पर समस्या का पुन: उत्पन्न किया है।
धन्यवाद।
1/6/2011 अद्यतन:
हर किसी के लिए धन्यवाद, जिन्होंने यूटीसी से वांछित समय उचित समय क्षेत्र ऑफसेट का उपयोग कर की गणना करने की कोशिश कर का सुझाव दिया। इस समय मैं ऐसा करने का जोखिम नहीं ले रहा हूं। इस विशेष व्यावसायिक आवश्यकता के लिए, यह कहना बेहतर है कि डेट वैल्यू वह नहीं है जिसे आप उम्मीद करते हैं क्योंकि यह एपीआई काम करता है। अगर मैं इसे "ठीक करने" का प्रयास करता हूं तो मेरा स्वामित्व है, और मैं नहीं चाहूंगा।
बस किक के लिए मैंने अच्छे पुराने स्क्रिप्टिंग का उपयोग करने की कोशिश की। इंटरफ़ेस के माध्यम से FileSystemObject। यह अपेक्षित परिणाम देता है जो Windows Explorer के साथ सहमत हैं, System.IO की तुलना में लगभग 5x प्रदर्शन जुर्माना के साथ। यदि यह पता चला है कि मुझे उन तिथियों को प्राप्त करना होगा जो विंडोज एक्सप्लोरर के पास हैं, मैं बुलेट काट दूंगा और इस मार्ग पर जाऊंगा।
एक और प्रयोग मैंने कोशिश की सी # के माध्यम से kernel32 में GetFileTime एपीआई समारोह के लिए सीधे जा रहा था:
[DllImport("kernel32.dll", SetLastError = true)]
private static extern bool GetFileTime(
IntPtr hFile,
ref FILETIME lpCreationTime,
ref FILETIME lpLastAccessTime,
ref FILETIME lpLastWriteTime
);
यही समान व्यवहार System.IO था के परिणामस्वरूप, समय Windows Explorer से एक घंटे के द्वारा किया गया था ।
फिर से सभी को धन्यवाद।
मुझे डेलाइट सेविंग टाइम इश्यू की तरह लगता है – Flipster
अंतिम एक्सेस समय में लगभग 1 घंटा की ग्रैन्युलरिटी है। साथ ही, ध्यान रखें कि डिफ़ॉल्ट रूप से विंडोज विस्टा और ऊपर में, [अंतिम एक्सेस टाइम मान डिफ़ॉल्ट रूप से एनटीएफएस वॉल्यूम्स पर अपडेट नहीं किया गया है] (http://blogs.technet.com/b/filecab/archive/2006/11/07 /disabling-last-access-time-in-windows-vista-to-improve-ntfs-performance.aspx)। –
डीएसटी अब प्रभावी नहीं है लेकिन यह * प्रभाव में था जब फ़ाइल को अंतिम बार संशोधित किया गया था। कौन सही है? उस प्रश्न पूछने से बचने के लिए यूटीसी में काम करें। –