Ouvrez un fichier avec le Bloc-notes en C #

116

Comment ouvrir un fichier en c #? Je ne veux pas dire le lire par textreader et readline (). Je veux dire, ouvrez-le en tant que fichier indépendant dans le bloc-notes.

Mohamed
la source
Vous souhaitez lancer une instance de bloc-notes à partir de votre programme et lui faire ouvrir un fichier spécifique?
Rejeter
1
Remarque: Lorsque je l'ai essayé avec .Net 2.0, je Process.Startn'ai pas automatiquement développé "% windir%", bien que l'omettre comme dans la réponse de viabhav ou le développer explicitement ( Environment.GetEnvironmentVariable("windir")) a fonctionné avec succès.
Brian
Vous pouvez intégrer un clone de bloc-notes dans votre application et le personnaliser pour qu'il fonctionne exactement comme vous le souhaitez. J'écris un clone de bloc-notes en C # vous pouvez le trouver ici: simplygoodcode.com/2012/04/notepad-clone-in-net-winforms.html
Luis Perez

Réponses:

190

Vous avez besoin System.Diagnostics.Process.Start().

L'exemple le plus simple:

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

Approche plus générique:

Process.Start(fileName);

La deuxième approche est probablement une meilleure pratique car cela amènera le shell Windows à ouvrir votre fichier avec son éditeur associé. De plus, si le fichier spécifié n'a pas d'association, il utilisera la Open With...boîte de dialogue de Windows.

Note à ceux dans les commentaires, merci pour votre contribution. Ma réponse rapide et sale était légèrement décalée, j'ai mis à jour la réponse pour refléter la bonne manière.

Aren
la source
1
Je ferais un peu de fuite si j'étais toi.
Albin Sunnanbo
1
Je conviens que c'est une façon de le faire, une autre façon si vous vouliez ouvrir le document mais pas exécuter le programme serait d'utiliser quelque chose du genre: richTextBox1.LoadFile (Program.editInC, RichTextBoxStreamType.UnicodePlainText) pour charger le contenu réel dans un fichier.
Jim
1
Il est préférable de passer le nom du fichier comme deuxième paramètre. En fait, selon la documentation , votre code ne devrait pas fonctionner, car le paramètre unique de Process.Startest le nom du document ou du fichier d'application, tandis que le vôtre est le nom de l'application combiné avec le paramètre de ligne de commande.
Vlad
@Albin: Merci, totalement oublié celui-là: p @Jim: Je crois que la question était de savoir comment lancer un éditeur. @Vlad: Merci, vous avez raison.
Aren
11
L'utilisation Process.Start(filename)est une injection de commande potentielle, par laquelle un attaquant pourrait se substituer MyTextFile.txtà MyMalicious.batou fdisk .... Mieux vaut utiliser Process.Start("notepad.exe", filename).
Geoff Bennett le
29

Vous ne fournissez pas beaucoup d'informations, mais en supposant que vous souhaitiez ouvrir n'importe quel fichier sur votre ordinateur avec l'application spécifiée pour le gestionnaire par défaut pour ce type de fichier, vous pouvez utiliser quelque chose comme ceci:

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

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

Le paramètre UseShellExecute indique à Windows d'utiliser le programme par défaut pour le type de fichier que vous ouvrez.

WaitForExit entraînera votre application à attendre que l'application que vous avez luanched ait été fermée.

TimothyP
la source
Et, en plus, il serait bon d'utiliser a if(File.Exists(fileToOpen))pour éviter de se heurter à une exception.
Wiccio
26

cela ouvrira le fichier avec le programme Windows par défaut (bloc-notes si vous ne l'avez pas changé);

Process.Start(@"c:\myfile.txt")
Colin Pickard
la source
15
System.Diagnostics.Process.Start( "notepad.exe", "text.txt");
Vaibhav
la source
12

Vous pouvez utiliser Process.Start, appelant notepad.exeavec le fichier comme paramètre.

 Process.Start(@"notepad.exe", pathToFile);
Oded
la source
2
À propos,% pathVariables% ne fonctionne pas avec cette méthode. Process.Start(@"%windir%\notepad.exe");lance une Win32Exception: "Impossible de trouver le fichier" mais normalement cela devrait fonctionner.
Aren
@Aren: qui peut être résolu en appelant Environment.ExpandEnvironmentVariables ()
sɐunıɔ ןɐ qɐp