Abra um arquivo com o Bloco de Notas em C #

115

Como abro um arquivo em c #? Não quero dizer lê-lo por textreader e readline (). Quero dizer, abri-lo como um arquivo independente no bloco de notas.

Mohamed
fonte
Você deseja iniciar uma instância do bloco de notas do seu programa e fazê-lo abrir um arquivo específico?
Dismissibilidade em
1
Nota: Quando tentei com .Net 2.0, Process.Startnão expandiu automaticamente "% windir%", embora omiti-lo como na resposta de viabhav ou expandi-lo explicitamente ( Environment.GetEnvironmentVariable("windir")) funcionou com sucesso.
Brian,
Você pode integrar um clone do bloco de notas em seu aplicativo e personalizá-lo para funcionar da maneira que você deseja. Eu escrevo um clone do bloco de notas em C #. Você pode encontrá-lo aqui: simplygoodcode.com/2012/04/notepad-clone-in-net-winforms.html
Luis Perez

Respostas:

190

Você precisa System.Diagnostics.Process.Start().

O exemplo mais simples:

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

Abordagem mais genérica:

Process.Start(fileName);

A segunda abordagem é provavelmente a melhor prática, pois fará com que o shell do Windows abra seu arquivo com o editor associado. Além disso, se o arquivo especificado não tiver uma associação, ele usará a Open With...caixa de diálogo do Windows.

Nota para aqueles nos comentários, obrigado por sua contribuição. Minha resposta rápida e suja estava um pouco errada, eu atualizei a resposta para refletir a maneira correta.

Aren
fonte
1
Eu escaparia um pouco se fosse você.
Albin Sunnanbo,
1
Concordo que esta é uma maneira de fazer isso, outra maneira, se você quiser abrir o documento, mas não executar o programa, seria usar algo parecido com: richTextBox1.LoadFile (Program.editInC, RichTextBoxStreamType.UnicodePlainText) para carregar o conteúdo real em um arquivo.
Jim
1
É melhor passar o nome do arquivo como um segundo parâmetro. Na verdade, de acordo com a documentação , seu código não deve funcionar, pois o único parâmetro de Process.Starté o nome do arquivo do documento ou do aplicativo, enquanto o seu é o nome do aplicativo combinado com o parâmetro da linha de comando.
Vlad,
@Albin: Obrigado, esqueci totalmente aquele: p @Jim: Acho que a questão era saber como lançar um editor. @Vlad: Obrigado, você está correto.
Aren
11
Usando Process.Start(filename)é uma injecção de comando potencial, pelo que um intruso poderia substituir MyTextFile.txtpara MyMalicious.batou fdisk .... Melhor usar Process.Start("notepad.exe", filename).
Geoff Bennett
29

Você não está fornecendo muitas informações, mas supondo que deseja abrir qualquer arquivo em seu computador com o aplicativo especificado para o manipulador padrão para esse tipo de arquivo, você pode usar algo assim:

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

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

O parâmetro UseShellExecute informa ao Windows para usar o programa padrão para o tipo de arquivo que você está abrindo.

O WaitForExit fará com que o seu aplicativo espere até que o aplicativo que você executou seja fechado.

TimothyP
fonte
E, além disso, seria bom usar um if(File.Exists(fileToOpen))para evitar encontrar uma exceção.
Wiccio
26

isso abrirá o arquivo com o programa padrão do Windows (bloco de notas, se você não o alterou);

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

Você pode usar Process.Start, chamando notepad.execom o arquivo como parâmetro.

 Process.Start(@"notepad.exe", pathToFile);
Oded
fonte
2
A propósito,% pathVariables% não funciona com este método. Process.Start(@"%windir%\notepad.exe");lança uma Win32Exception: "Não é possível localizar o arquivo", mas normalmente deve funcionar.
Aren
@Aren: que pode ser resolvido chamando Environment.ExpandEnvironmentVariables ()
sɐunıɔ ןɐ qɐp