Mở tệp bằng Notepad trong C #


115

Làm cách nào để mở tệp trong c #? Ý tôi không phải là đọc nó bằng trình đọc văn bản và readline (). Ý tôi là mở nó như một tệp độc lập trong notepad.


Bạn muốn khởi chạy một phiên bản notepad từ chương trình của mình và mở một tệp cụ thể?
Xuất viện 29/10/10

1
Lưu ý: Tại thời điểm tôi thử nó với .Net 2.0, Process.Startkhông tự động mở rộng "% windir%", mặc dù việc giới hạn nó như trong câu trả lời của viabhav hoặc mở rộng nó một cách rõ ràng ( Environment.GetEnvironmentVariable("windir")) đã hoạt động thành công.
Brian

Bạn có thể tích hợp một bản sao notepad vào ứng dụng của mình và tùy chỉnh nó hoạt động theo cách bạn muốn. Tôi viết một bản sao notepad bằng C #, bạn có thể tìm nó ở đây: simplegoodcode.com/2012/04/notepad-clone-in-net-winforms.html
Luis Perez

Câu trả lời:


190

Bạn cần System.Diagnostics.Process.Start().

Ví dụ đơn giản nhất:

Process.Start("notepad.exe", fileName);

Cách tiếp cận Chung hơn:

Process.Start(fileName);

Cách tiếp cận thứ hai có lẽ là một cách thực hành tốt hơn vì điều này sẽ làm cho Windows Shell mở tệp của bạn với trình soạn thảo được liên kết với nó. Ngoài ra, nếu tệp được chỉ định không có liên kết, nó sẽ sử dụng Open With...hộp thoại từ windows.

Lưu ý với những người trong các nhận xét, cảm ơn bạn đã đóng góp ý kiến. Câu trả lời nhanh n 'bẩn của tôi hơi bị sai, tôi đã cập nhật câu trả lời để phản ánh đúng cách.


1
Tôi sẽ trốn thoát nếu tôi là bạn.
Albin Sunnanbo

1
Tôi đồng ý rằng đây là một cách để làm điều này, một cách khác nếu bạn muốn mở tài liệu nhưng không chạy chương trình sẽ là sử dụng thứ gì đó dọc theo dòng: richTextBox1.LoadFile (Program.editInC, RichTextBoxStreamType.UnicodePlainText) để tải nội dung thực tế vào một tệp.
Jim

1
Tốt hơn là chuyển tên tệp làm tham số thứ hai. Trên thực tế, theo tài liệu , mã của bạn sẽ không hoạt động, vì tham số duy nhất Process.Startlà tài liệu hoặc tên tệp ứng dụng, trong khi của bạn là tên ứng dụng kết hợp với tham số dòng lệnh.
Vlad

@Albin: Cảm ơn, hoàn toàn bỏ qua câu hỏi đó: p @Jim: Tôi tin rằng câu hỏi đặt ra là làm thế nào để khởi chạy một trình soạn thảo. @Vlad: Cảm ơn, bạn đã chính xác.
Aren

11
Việc sử dụng Process.Start(filename)là một lệnh tiêm tiềm năng, theo đó kẻ tấn công có thể thay thế MyTextFile.txtcho MyMalicious.bathoặc fdisk .... Tốt hơn để sử dụng Process.Start("notepad.exe", filename).
Geoff Bennett

29

Bạn không cung cấp nhiều thông tin, nhưng giả sử bạn chỉ muốn mở bất kỳ tệp nào trên máy tính của mình bằng ứng dụng được chỉ định cho trình xử lý mặc định cho loại tệp đó, bạn có thể sử dụng một cái gì đó như sau:

var fileToOpen = "SomeFilePathHere";
var process = new Process();
process.StartInfo = new ProcessStartInfo()
{
    UseShellExecute = true,
    FileName = fileToOpen
};

process.Start();
process.WaitForExit();

Tham số UseShellExecute cho Windows sử dụng chương trình mặc định cho loại tệp bạn đang mở.

WaitForExit sẽ khiến ứng dụng của bạn đợi cho đến khi ứng dụng bạn đã duyệt bị đóng.


Và, ngoài ra, sẽ rất tốt nếu sử dụng một if(File.Exists(fileToOpen))để tránh gặp phải trường hợp ngoại lệ.
Wiccio

26

điều này sẽ mở tệp bằng chương trình windows mặc định (notepad nếu bạn chưa thay đổi nó);

Process.Start(@"c:\myfile.txt")

15
System.Diagnostics.Process.Start( "notepad.exe", "text.txt");

12

Bạn có thể sử dụng Process.Start, gọi notepad.exevới tệp như một tham số.

 Process.Start(@"notepad.exe", pathToFile);

2
Nhân tiện,% pathVariables% không hoạt động với phương pháp này. Process.Start(@"%windir%\notepad.exe");ném Win32Exception: "Không thể tìm thấy tệp" nhưng bình thường nó sẽ hoạt động.
Aren

@Aren: có thể được giải quyết bằng cách gọi Environment.ExpandEnosystemVariables ()
sɐunıɔ ןɐ qɐp

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.