เปิดไฟล์ด้วย Notepad ใน C #


116

ฉันจะเปิดไฟล์ใน c # ได้อย่างไร ฉันไม่ได้หมายถึงการอ่านโดย textreader และ readline () ฉันหมายถึงเปิดเป็นไฟล์อิสระในแผ่นจดบันทึก


คุณต้องการเปิดอินสแตนซ์ของ notepad จากโปรแกรมของคุณและเปิดไฟล์เฉพาะหรือไม่?
ไล่ออก

1
หมายเหตุ: ตอนที่ฉันลองใช้. Net 2.0 Process.Startไม่ได้ขยาย "% windir%" โดยอัตโนมัติแม้ว่าจะไม่ใช้มันเหมือนในคำตอบของ viabhavหรือขยายอย่างชัดเจน ( Environment.GetEnvironmentVariable("windir")) ก็ใช้ได้ผล
Brian

คุณสามารถรวม notepad clone เข้ากับแอปพลิเคชันของคุณและปรับแต่งให้ใช้งานได้ตามที่คุณต้องการ ฉันเขียน notepad clone ใน C # คุณสามารถหาได้ที่นี่: simplygoodcode.com/2012/04/notepad-clone-in-net-winforms.html
Luis Perez

คำตอบ:


190

System.Diagnostics.Process.Start()คุณจำเป็นต้อง

ตัวอย่างที่ง่ายที่สุด:

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

แนวทางทั่วไปเพิ่มเติม:

Process.Start(fileName);

แนวทางที่สองน่าจะเป็นแนวทางปฏิบัติที่ดีกว่าเนื่องจากจะทำให้ windows Shell เปิดไฟล์ของคุณด้วยโปรแกรมแก้ไขที่เกี่ยวข้อง นอกจากนี้หากไฟล์ที่ระบุไม่มีการเชื่อมโยงก็จะใช้Open With...กล่องโต้ตอบจาก windows

หมายเหตุถึงผู้ที่อยู่ในความคิดเห็นขอบคุณสำหรับข้อมูลของคุณ คำตอบ Quick n 'สกปรกของฉันผิดไปเล็กน้อยฉันได้อัปเดตคำตอบเพื่อให้สอดคล้องกับวิธีที่ถูกต้อง


1
ฉันจะหนีถ้าฉันเป็นคุณ
Albin Sunnanbo

1
ฉันยอมรับว่านี่เป็นวิธีหนึ่งในการทำเช่นนี้อีกวิธีหนึ่งหากคุณต้องการเปิดเอกสาร แต่ไม่เรียกใช้โปรแกรมก็คือการใช้บางสิ่งตามบรรทัด: richTextBox1.LoadFile (Program.editInC, RichTextBoxStreamType.UnicodePlainText) สำหรับการโหลด เนื้อหาจริงลงในไฟล์
จิม

1
ควรส่งชื่อไฟล์เป็นพารามิเตอร์ที่สอง ตามเอกสารประกอบโค้ดของคุณไม่ควรใช้งานได้เนื่องจากพารามิเตอร์เดียวProcess.Startคือชื่อไฟล์เอกสารหรือแอปพลิเคชันในขณะที่ของคุณเป็นชื่อแอปพลิเคชันที่รวมกับพารามิเตอร์บรรทัดคำสั่ง
Vlad

@Albin: ขอบคุณที่มองข้ามสิ่งนั้นไปโดยสิ้นเชิง: p @Jim: ฉันเชื่อว่าคำถามนี้ถามว่าจะเปิดตัวแก้ไขได้อย่างไร @ วลาด: ขอบคุณคุณพูดถูก
Aren

11
ใช้Process.Start(filename)เป็นคำสั่งที่มีศักยภาพในการฉีดโดยผู้โจมตีสามารถใช้แทนMyTextFile.txtสำหรับหรือMyMalicious.bat fdisk ...ใช้ดีกว่าProcess.Start("notepad.exe", filename).
Geoff Bennett

29

คุณไม่ได้ให้ข้อมูลมากมาย แต่สมมติว่าคุณต้องการเปิดเฉพาะไฟล์ใด ๆ บนคอมพิวเตอร์ของคุณด้วยแอปพลิเคชันที่ระบุไว้สำหรับตัวจัดการเริ่มต้นสำหรับประเภทไฟล์นั้นคุณสามารถใช้สิ่งต่อไปนี้:

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

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

พารามิเตอร์ UseShellExecute บอกให้ Windows ใช้โปรแกรมเริ่มต้นสำหรับประเภทไฟล์ที่คุณกำลังเปิด

WaitForExit จะทำให้แอปพลิเคชันของคุณรอจนกว่าแอปพลิเคชันที่คุณเตรียมไว้จะถูกปิด


และนอกจากนี้ควรใช้ a if(File.Exists(fileToOpen))เพื่อหลีกเลี่ยงการเกิดข้อยกเว้น
Wiccio



12

คุณสามารถใช้Process.Startเรียกnotepad.exeโดยใช้ไฟล์เป็นพารามิเตอร์

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

2
ยังไงก็ตาม% pathVariables% ไม่ทำงานกับเมธอดนี้ Process.Start(@"%windir%\notepad.exe");พ่น Win32Exception: "ไม่พบไฟล์" แต่โดยปกติควรใช้งานได้
Aren

@Aren: ซึ่งสามารถแก้ไขได้ในการเรียก Environment.ExpandEnvironmentVariables ()
sɐunıɔןɐqɐp

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.