2009-10-26 36 views
5

Trong ứng dụng C# WinForms, tôi đang sử dụng System.IO.Diagnostics.Process.Start (tên tệp) để mở tệp. Loại tệp có thể là .doc, .docx, .xls, .xlsx, .csv, .pdf hoặc .txt.Mở tệp chỉ đọc

Có cách nào để buộc các tệp này được mở chỉ đọc không?

Trả lời

11

Bạn cần đặt thuộc tính tệp của tệp trước khi bắt đầu quá trình và sau đó đặt lại khi bạn mở tệp.

Ví dụ:

var attributes = File.GetAttributes(path); 

File.SetAttributes(filePath, attributes | FileAttributes.ReadOnly); 

System.IO.Diagnostics.Process.Start(fileName); 

File.SetAttributes(filePath, attributes); 

Lưu ý: Điều này sẽ thay đổi các thuộc tính tập tin của tập tin thực tế, vì vậy giữ cho rằng trong tâm trí.

+0

Điều đó thực sự không giống như mở tệp ở chế độ chỉ đọc trong hầu hết phần mềm. Nhiều chương trình (chẳng hạn như Word) cho phép bạn mở một tệp ở chế độ chỉ đọc mà không cần thay đổi tệp. Xem câu trả lời của tôi để biết chi tiết. –

+0

@Reed Yeah Tôi đã đọc câu trả lời của bạn trước khi tôi thêm câu trả lời này. Tôi đã thêm điều này vì sự đa dạng của các phần mở rộng tập tin mà OP chỉ ra. Tôi nghĩ rằng đây sẽ là một câu trả lời "đảm bảo không gây rối với tệp". – Joseph

+0

gần 7 năm sau ... cảm ơn – elmer007

8

Thật không may, cách thực hiện thay đổi này với loại tệp.

Tùy chọn tốt nhất là kiểm tra thuộc tính ProcessStartInfo.Verbs cho một động từ đã biết cho loại tệp của bạn. Điều này thường là "OpenAsReadOnly". Sau đó bạn sẽ đặt động từ đó và bắt đầu quá trình với một số ProcessStartInfo.

Chỉ cần nhận ra - điều này không phù hợp với mọi loại tệp, vì chương trình cung cấp và xử lý một động từ thích hợp.

1

Process.Start bắt đầu bất kỳ chương trình nào được liên kết với tệp đó. Bạn không thể chỉ thị nó để mở tệp dưới dạng chỉ đọc, trừ khi chương trình hỗ trợ đối số dòng lệnh để cho biết rằng nó sẽ mở dưới dạng chỉ đọc (hoặc nếu nó hỗ trợ động từ OpenAsReadOnly).

Bạn có thể đặt thuộc tính tệp trên tệp thành chỉ đọc trước khi mở, nhưng tôi không nghĩ đó là những gì bạn muốn.

0

Tùy thuộc vào ứng dụng đã đăng ký có chuyển đổi/tùy chọn hỗ trợ chế độ chỉ đọc hay không. Nếu có, bạn có thể chuyển sang tùy chọn chỉ đọc. Đối với trường hợp của bạn, tôi không nghĩ Process.Start có thể nếu không có tùy chọn chỉ đọc.

2

Bạn có thể sao chép tệp vào một vị trí tạm thời không, sau đó sử dụng tệp tạm thời để khởi chạy chương trình?

Sau đó, bạn có thể theo dõi quá trình và khi thoát, hãy xóa tệp tạm thời?

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