2010-01-21 25 views
23

Tôi có một vấn đề rất lạ! Tôi tự hỏi nếu vấn đề là trong khuôn khổ, hệ điều hành hoặc có thể nó chỉ là tôi, những điều hiểu lầm ...Vấn đề thời gian tạo tệp lạ không thể tin được

Tôi có một tập tin, có thể được tạo ra từ lâu, tôi sử dụng tập tin, và sau đó tôi muốn lưu trữ nó, bằng cách thay đổi tên của nó. Sau đó, tôi muốn tạo một tệp mới, có cùng tên với tệp cũ, trước khi tệp được đổi tên. Vừa đủ dễ!

Sự cố thực sự gây khó khăn cho tôi, là tệp mới được tạo bị lỗi "tạo ra" -timestamp! Đó là một vấn đề vì đó là dấu thời gian mà tôi muốn sử dụng để xác định thời điểm lưu trữ và tạo tệp mới.

Tôi đã tạo một mẫu rất nhỏ hiển thị sự cố. Để mẫu hoạt động, phải có tệp 1.txt trong thư mục Tệp. Ngoài ra, thuộc tính tệp cũng phải được đặt ngược thời gian (với một trong các công cụ có sẵn, tôi sử dụng 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

Cuối cùng, tôi đã giải quyết nó sau khi tệp được tạo (với dấu thời gian sai/cũ), tôi đã thay đổi nó "thủ công" bằng cách đặt FileInfo.CreationTime = DateTime.Now. – kaze

Trả lời

27

Đây là kết quả của tính năng "phức tạp" quay lại những ngày cũ của Windows. Các chi tiết cốt lõi đang ở đây:

Về cơ bản, đây là có mục đích. Nhưng nó có thể cấu hình, và một lỗi thời trong hầu hết các phần mềm hiện nay.

I nghĩ bạn có thể tạo tên tệp mới trước, sau đó đổi tên cũ-> cũ.1, sau đó mới-> cũ và sẽ "hoạt động". Tôi không nhớ một cách trung thực những gì chúng tôi đã làm khi chúng tôi gặp phải vài năm trở lại đây.

+0

Cảm ơn, đây chính là vấn đề của tôi. Chưa bao giờ nghe điều đó. Bây giờ tôi có thể tìm cách giải quyết bằng cách đổi tên thành một tên ngẫu nhiên tạm thời. – kaze

8

Gần đây tôi đã gặp sự cố tương tự được mô tả trong câu hỏi. Trong trường hợp của chúng tôi, nếu tệp nhật ký của chúng tôi cũ hơn một tuần, chúng tôi sẽ xóa tệp đó và bắt đầu một tệp mới. Tuy nhiên, nó được giữ cùng một ngày được tạo từ năm 2008.

Một câu trả lời ở đây mô tả đổi tên tệp cũ và sau đó tạo một câu trả lời mới, hy vọng chọn Ngày tạo phù hợp. Tuy nhiên, điều đó đã không thành công đối với chúng tôi, nó vẫn giữ ngày cũ.

Những gì chúng tôi đã sử dụng là phương pháp File.SetCreationTime và như tên gọi của nó, dễ dàng cho phép chúng tôi kiểm soát ngày tạo tệp, cho phép chúng tôi đặt ngày đó thành DateTime.Now. Phần còn lại của logic của chúng tôi đã hoạt động chính xác sau đó.

Các vấn đề liên quan