2010-01-21 14 views
23

मुझे वास्तव में एक बहुत ही अजीब समस्या है! मुझे आश्चर्य है कि समस्या ढांचे में है, ओएस या शायद यह सिर्फ मुझे है, चीजों को गलत समझना ...अविश्वसनीय अजीब फ़ाइल निर्माण समय समस्या

मेरे पास एक फ़ाइल है, जिसे बहुत समय पहले बनाया जा सकता है, मैं फ़ाइल का उपयोग करता हूं, और फिर मैं चाहता हूं इसका नाम बदलकर इसे संग्रहीत करें। फिर मैं एक नई फाइल बनाना चाहता हूं, उसी नाम के साथ पुरानी फ़ाइल के नाम से पहले इसका नाम बदल दिया गया था। काफी आसान!

समस्या जो वास्तव में मुझे पहेली करती है, यह है कि नव निर्मित फ़ाइल गलत "बनाई गई" -टिमस्टैम्प हो जाती है! यह एक समस्या है क्योंकि यह उस टाइमस्टैम्प है जिसका उपयोग मैं यह निर्धारित करने के लिए करना चाहता हूं कि एक नई फ़ाइल कब संग्रहित करें और बनाएं।

मैंने एक बहुत छोटा नमूना बनाया है जो समस्या को दिखाता है। नमूना काम करने के लिए, फाइल फ़ोल्डर में फ़ाइल 1.txt होना चाहिए। साथ ही, फ़ाइल विशेषता को समय पर भी सेट किया जाना चाहिए (उपलब्ध टूल्स में से एक के साथ, मैं Nomad.NET का उपयोग करता हूं)।

static void Main(string[] args) 
    { 
     // Create a directory, if doesnt exist. 
     string path = Path.GetDirectoryName(Application.ExecutablePath) + "\\Files"; 
     Directory.CreateDirectory(path); 

     // Create/attach to the 1.txt file 
     string filename = path + "\\1.txt"; 
     StreamWriter sw = File.AppendText(filename); 
     sw.WriteLine("testing"); 
     sw.Flush(); 
     sw.Close(); 
     // Rename it... 
     File.Move(filename, path + "\\2.txt"); 

     // Create a new 1.txt 
     sw = File.AppendText(filename); 
     FileInfo fi = new FileInfo(filename); 
     // Observe, the old files creation date!! 
     Console.WriteLine(String.Format("Date: {0}", fi.CreationTime.Date)); 

     Console.ReadKey(); 
    } 
+2

अंत में, मैं यह द्वारा के बाद फ़ाइल बनाए जाने के हल (गलत/वर्ष टाइमस्टैम्प के साथ), मैं इसे "मैन्युअल" FileInfo.CreationTime = DateTime.Now की स्थापना द्वारा बदल दिया है। – kaze

उत्तर

27

यह एक आर्केन "फीचर" का परिणाम विंडोज के पुराने दिनों में वापस जा रहा है। कोर विवरण यहां हैं:

असल में, इस उद्देश्य पर है। लेकिन यह आज के अधिकांश सॉफ्टवेयर में कॉन्फ़िगर करने योग्य और एक अनाचारवाद है।

I सोचें आप पहले एक नया फ़ाइल नाम बना सकते हैं, फिर पुराने-> old.1, फिर नया-> पुराना नाम बदलें, और यह "काम" करेगा। मुझे ईमानदारी से याद नहीं है जब हमने पिछले कुछ सालों में इस दौड़ में भाग लिया था।

+0

धन्यवाद, यह वास्तव में मेरी समस्या है। इससे पहले कभी नहीं सुना। अब मैं शायद एक अस्थायी यादृच्छिक नाम का नाम बदलकर एक समाधान मिल सकता है। – kaze

8

मैंने हाल ही में प्रश्न में वर्णित एक ही समस्या में भाग लिया। हमारे मामले में, यदि हमारी लॉग फ़ाइल एक सप्ताह से अधिक पुरानी है, तो हम इसे हटा देते हैं और एक नया शुरू करते हैं। हालांकि, यह बनाया एक ही तिथि के बाद से 2008

एक जवाब यहाँ का वर्णन कर रखा है पुराने फ़ाइल का नाम बदलने और फिर एक नया बनाने, उम्मीद है कि उचित निर्माण तिथि उठा। हालांकि, यह हमारे लिए असफल रहा, यह अभी भी पुरानी तारीख रखी गई है।

हमने जो कुछ भी इस्तेमाल किया था वह फ़ाइल.SetCreationTime विधि था, और जैसा कि इसके नाम से पता चलता है, यह आसानी से हमें फ़ाइल की निर्माण तिथि को नियंत्रित करने देता है, जिससे हम इसे डेटटाइम पर सेट कर सकते हैं.अब। हमारे बाकी तर्क बाद में सही ढंग से काम किया।

2

फ़ाइल.SetCreationTime ("फ़ाइल", डेटटाइम.अब);

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