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.
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
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.
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 =newProcess();
process.StartInfo=newProcessStartInfo(){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.
À 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 ()
Process.Start
n'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.Réponses:
Vous avez besoin
System.Diagnostics.Process.Start()
.L'exemple le plus simple:
Approche plus générique:
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.
la source
Process.Start
est 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.Process.Start(filename)
est une injection de commande potentielle, par laquelle un attaquant pourrait se substituerMyTextFile.txt
àMyMalicious.bat
oufdisk ...
. Mieux vaut utiliserProcess.Start("notepad.exe", filename)
.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:
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.
la source
if(File.Exists(fileToOpen))
pour éviter de se heurter à une exception.cela ouvrira le fichier avec le programme Windows par défaut (bloc-notes si vous ne l'avez pas changé);
la source
la source
Vous pouvez utiliser
Process.Start
, appelantnotepad.exe
avec le fichier comme paramètre.la source
Process.Start(@"%windir%\notepad.exe");
lance une Win32Exception: "Impossible de trouver le fichier" mais normalement cela devrait fonctionner.Utilisez System.Diagnostics.Process pour lancer une instance de Notepad.exe.
la source