Bagaimana saya membuka file di c #? Saya tidak bermaksud membacanya dengan textreader dan readline (). Maksud saya membukanya sebagai file independen di notepad.
Anda ingin meluncurkan notepad dari program Anda dan membuka file tertentu?
Hentikan tanggal
1
Catatan: Ketika saya mencobanya dengan .Net 2.0, Process.Starttidak secara otomatis mengembangkan "% windir%", meskipun menghilangkannya seperti dalam jawaban viabhav atau mengembangkannya secara eksplisit ( Environment.GetEnvironmentVariable("windir")) berhasil dengan sukses.
Brian
Anda dapat mengintegrasikan klon notepad ke dalam aplikasi Anda dan menyesuaikannya agar berfungsi seperti yang Anda inginkan. Saya menulis klon notepad di C # Anda dapat menemukannya di sini: simplygoodcode.com/2012/04/notepad-clone-in-net-winforms.html
Luis Perez
Jawaban:
190
Anda membutuhkan System.Diagnostics.Process.Start().
Contoh paling sederhana:
Process.Start("notepad.exe", fileName);
Lebih Banyak Pendekatan Generik:
Process.Start(fileName);
Pendekatan kedua mungkin merupakan praktik yang lebih baik karena ini akan menyebabkan windows Shell membuka file Anda dengan editor yang terkait. Selain itu, jika file yang ditentukan tidak memiliki asosiasi, itu akan menggunakan Open With...dialog dari windows.
Catatan untuk yang ada di komentar, terima kasih atas masukannya. Jawaban cepat dan jorok saya sedikit salah, saya telah memperbarui jawaban untuk mencerminkan cara yang benar.
Saya setuju bahwa ini adalah salah satu cara untuk melakukan ini, cara lain jika Anda ingin membuka dokumen tetapi tidak menjalankan program akan menggunakan sesuatu di sepanjang baris: richTextBox1.LoadFile (Program.editInC, RichTextBoxStreamType.UnicodePlainText) untuk memuat konten aktual ke dalam file.
Jim
1
Lebih baik melewatkan nama file sebagai parameter kedua. Sebenarnya, menurut dokumentasi , kode Anda seharusnya tidak berfungsi, karena parameter tunggal Process.Startadalah dokumen atau nama file aplikasi, sedangkan milik Anda adalah nama aplikasi yang digabungkan dengan parameter baris perintah.
Vlad
@Albin: Terima kasih, yang itu benar-benar terlewatkan: p @Jim: Saya yakin pertanyaannya adalah menanyakan bagaimana cara meluncurkan editor. @Vlad: Terima kasih, Anda benar.
Aren
11
Menggunakan Process.Start(filename)merupakan suntikan perintah potensial, dimana penyerang bisa menggantikan MyTextFile.txtuntuk MyMalicious.batatau fdisk .... Lebih baik digunakan Process.Start("notepad.exe", filename).
Geoff Bennett
29
Anda tidak memberikan banyak informasi, tetapi dengan asumsi Anda ingin membuka sembarang file di komputer Anda dengan aplikasi yang ditentukan untuk penangan default untuk jenis file tersebut, Anda dapat menggunakan sesuatu seperti ini:
var fileToOpen ="SomeFilePathHere";var process =newProcess();
process.StartInfo=newProcessStartInfo(){UseShellExecute=true,FileName= fileToOpen
};
process.Start();
process.WaitForExit();
Parameter UseShellExecute memberi tahu Windows untuk menggunakan program default untuk jenis file yang Anda buka.
WaitForExit akan menyebabkan aplikasi Anda menunggu hingga aplikasi yang Anda luaning ditutup.
Omong-omong,% pathVariables% tidak bekerja dengan metode ini. Process.Start(@"%windir%\notepad.exe");melempar Win32Exception: "Tidak dapat menemukan file" tetapi biasanya itu harus bekerja.
Aren
@Aren: yang dapat diselesaikan dengan memanggil Environment.ExpandEnvironmentVariables ()
Process.Start
tidak secara otomatis mengembangkan "% windir%", meskipun menghilangkannya seperti dalam jawaban viabhav atau mengembangkannya secara eksplisit (Environment.GetEnvironmentVariable("windir")
) berhasil dengan sukses.Jawaban:
Anda membutuhkan
System.Diagnostics.Process.Start()
.Contoh paling sederhana:
Lebih Banyak Pendekatan Generik:
Pendekatan kedua mungkin merupakan praktik yang lebih baik karena ini akan menyebabkan windows Shell membuka file Anda dengan editor yang terkait. Selain itu, jika file yang ditentukan tidak memiliki asosiasi, itu akan menggunakan
Open With...
dialog dari windows.Catatan untuk yang ada di komentar, terima kasih atas masukannya. Jawaban cepat dan jorok saya sedikit salah, saya telah memperbarui jawaban untuk mencerminkan cara yang benar.
sumber
Process.Start
adalah dokumen atau nama file aplikasi, sedangkan milik Anda adalah nama aplikasi yang digabungkan dengan parameter baris perintah.Process.Start(filename)
merupakan suntikan perintah potensial, dimana penyerang bisa menggantikanMyTextFile.txt
untukMyMalicious.bat
ataufdisk ...
. Lebih baik digunakanProcess.Start("notepad.exe", filename)
.Anda tidak memberikan banyak informasi, tetapi dengan asumsi Anda ingin membuka sembarang file di komputer Anda dengan aplikasi yang ditentukan untuk penangan default untuk jenis file tersebut, Anda dapat menggunakan sesuatu seperti ini:
Parameter UseShellExecute memberi tahu Windows untuk menggunakan program default untuk jenis file yang Anda buka.
WaitForExit akan menyebabkan aplikasi Anda menunggu hingga aplikasi yang Anda luaning ditutup.
sumber
if(File.Exists(fileToOpen))
untuk menghindari terjadinya pengecualian.ini akan membuka file dengan program windows default (notepad jika Anda belum mengubahnya);
sumber
sumber
Anda dapat menggunakan
Process.Start
, memanggilnotepad.exe
dengan file sebagai parameter.sumber
Process.Start(@"%windir%\notepad.exe");
melempar Win32Exception: "Tidak dapat menemukan file" tetapi biasanya itu harus bekerja.Gunakan System.Diagnostics.Process untuk meluncurkan contoh Notepad.exe.
sumber