2009-07-04 15 views
6

Tôi đã thấy rằng hệ thống Windows sử dụng các tệp tạm thời để tăng hiệu suất của một số tác vụ. Các tệp đó được đánh dấu bằng thuộc tính 0x100 khi tôi xem chúng. Tôi đã có các văn bản sau đây từ Microsoft: "Cách tạo tệp tạm thời (0x100) để tăng tốc ứng dụng

Bằng cách sử dụng CreateFile() với cờ FILE_ATTRIBUTE_TEMPORARY, bạn hãy hệ thống biết rằng tập tin là khả năng được sống ngắn Các tập tin tạm thời được tạo ra. như một tập tin bình thường . Hệ thống cần làm một số tiền tối thiểu là số tiền lười ghi vào tập tin hệ thống để giữ cấu trúc đĩa (các thư mục và vv) phù hợp. Điều này cho thấy sự xuất hiện rằng tệp đã được ghi vào đĩa . "

Ví dụ về việc tạo tệp tạm thời bằng Delphi?

Cảm ơn.

[EDIT]

bổ sung câu hỏi: những gì có thể là bối cảnh của việc sử dụng tập tin như vậy, ví dụ, nó có thể được sử dụng cho một hệ thống đăng nhập. Nhật ký là tập tin này với thuộc tính temp? Nó sẽ được nhanh hơn và ít bộ nhớ dễ bị khi đăng nhập nhận được rất lớn?

[EDIT]

Ok tôi có tạo file sử dụng giải pháp được đưa ra bởi schnaader dưới đây với các FILE_ATTRIBUTE_TEMPORARY:

hMyFile := CreateFile(FileName, 
         GENERIC_WRITE, 
         0, 
         nil, 
         CREATE_ALWAYS, 
         FILE_ATTRIBUTE_TEMPORARY, 
         0); 

tập tin như vậy có được thuộc tính 0x120 khi tạo ra. Do đó một tập tin tạm thời theo hệ thống.

Tôi cũng tạo một tệp có cờ FILE_FLAG_DELETE_ON_CLOSE (see this article by L. Osterman).

Vì vậy:

hMyFile := CreateFile(FileName, 
         GENERIC_WRITE, 
         0, 
         nil, 
         CREATE_ALWAYS, 
         FILE_FLAG_DELETE_ON_CLOSE, 
         0); 

Tập tin này được không có thuộc tính và các tập tin được tự động xóa khi ứng dụng được đóng cửa hoặc phá hủy.

Tôi không tìm thấy cách kết hợp thuộc tính và cờ. Bất kỳ ý tưởng?

Cảm ơn

Trả lời

7

Vâng, làm thế nào về việc sử dụng phương pháp CreateFile()?

var 
    FileName : PChar; 
    hMyFile : THandle; 

... 

hMyFile := CreateFile(FileName, 
         GENERIC_WRITE, 
         0, 
         nil, 
         CREATE_ALWAYS, 
         FILE_ATTRIBUTE_TEMPORARY, 
         0); 

if (hMyFile = INVALID_HANDLE_VALUE) then begin 
    // Error 
end; 

... 

CloseHandle(hMyFile); 

Để kết hợp cờ với FILE_FLAG_DELETE_ON_CLOSE, sử dụng or:

hMyFile := CreateFile(FileName, 
         GENERIC_WRITE, 
         0, 
         nil, 
         CREATE_ALWAYS, 
         FILE_ATTRIBUTE_TEMPORARY or FILE_FLAG_DELETE_ON_CLOSE, 
         0); 
+0

Ok - tôi cần bối cảnh sử dụng tệp đó, ví dụ, nó có thể được sử dụng cho hệ thống nhật ký không. Nhật ký là tập tin này với thuộc tính temp? Nó sẽ được nhanh hơn và ít bộ nhớ dễ bị khi đăng nhập nhận được rất lớn? (lưu ý, tôi đã chỉnh sửa câu hỏi ban đầu của tôi với câu hỏi bổ sung này). Cảm tạ. – volvox

+0

Nó chỉ là một tập tin. Sử dụng nó khi sử dụng tệp thích hợp. Các vấn đề về hiệu suất yêu cầu điểm chuẩn và các phân tích khác, mặc dù người ta có thể đưa ra các dự đoán được giáo dục. –

+1

OK - Tôi đã thực hiện điều này: http://blogs.msdn.com/larryosterman/archive/2004/04/19/116084.aspx – volvox

2

Lá cờ tạm thời chỉ cho thấy rằng bạn muốn ghi vào đĩa để được muộn càng tốt. Điều này hoàn toàn ngược lại bạn muốn cho một tệp nhật ký, vì bạn muốn lấy nội dung của tệp được ghi một cách an toàn vào đĩa để bạn có thể truy cập ngay cả trong trường hợp lỗi hệ thống.

Để trích dẫn từ MSDN page fro CreateFile():

Xác định thuộc tính FILE_ATTRIBUTE_TEMPORARY gây các hệ thống tập tin để tránh ghi dữ liệu trở lại mass storage nếu bộ nhớ cache đủ có sẵn, bởi vì một ứng dụng xóa một tập tin tạm thời sau một tay cầm bị đóng . Trong trường hợp đó, hệ thống hoàn toàn có thể tránh ghi dữ liệu. Mặc dù nó không trực tiếp kiểm soát bộ nhớ đệm dữ liệu giống như các cờ đã đề cập trước đó, thuộc tính FILE_ATTRIBUTE_TEMPORARY không cho phép hệ thống giữ càng nhiều càng tốt trong bộ đệm hệ thống mà không cần viết và do đó có thể là mối quan tâm đối với một số ứng dụng nhất định.

Theo ý kiến ​​của tôi, bạn chỉ sử dụng nó, nếu đó thực sự là dữ liệu tạm thời mà bạn sẽ xóa bất kỳ khi nào bạn thực hiện xong, ví dụ: những thứ bạn muốn viết vào thư mục %TEMP%.

+0

Cảm ơn bạn - Gợi ý tốt. Bạn cũng có thể muốn đọc bài viết này: http://blogs.msdn.com/larryosterman/archive/2004/04/19/116084.aspx – volvox

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