Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过C#控制台程序通过记事本打开和保存文件_C#_Save_Notepad - Fatal编程技术网

如何通过C#控制台程序通过记事本打开和保存文件

如何通过C#控制台程序通过记事本打开和保存文件,c#,save,notepad,C#,Save,Notepad,我已经知道我可以用c语言的记事本打开和关闭现有的文本文件# 像这样: using System.Diagnostics; class Program { static void Main(string[] args) { // open by notepad Process.Start("notepad.exe", @"myfile.txt"); // automatically save this file b

我已经知道我可以用c语言的记事本打开和关闭现有的文本文件# 像这样:

using System.Diagnostics;

class Program
{
    static void Main(string[] args)
    {        
        // open by notepad
        Process.Start("notepad.exe", @"myfile.txt");

        // automatically save this file by notepad

        // kill notepad process
        Process[] proc = Process.GetProcessesByName("notepad");
        proc[0].Kill();   
    }
}
但是在我关闭这个文件之前,我需要用记事本自动保存这个文件。我试图按ctrl+s键发送击键,但没有成功。
有这个的.net代码吗?谢谢。

如果您需要修改文件,更好的方法是使用类中当前存在的操作打开、修改和保存文本文件内容。当文件以代码打开时,您可以使用-namespace(System.Text.Encoding)中的类更改其编码


您可以启动
notepad.exe进程,但之后就没有太多事情要做了。

我想您可以这样做

将给定的密钥发送到活动应用程序,然后等待 要处理的消息

备注

[DllImport("User32.dll")]   
public static extern Int32 SetForegroundWindow(int hWnd);   
使用SendWait将击键或击键组合发送到 激活应用程序并等待输入击键消息 处理。您可以使用此方法将击键发送到 应用程序并等待由启动的任何进程 要完成的击键。如果另一个 应用程序必须完成才能继续

导入

[DllImport("User32.dll")]   
public static extern Int32 SetForegroundWindow(int hWnd);   
代码

var process = Process.Start("notepad.exe", @"myfile.txt"));
process.WaitForInputIdle();
var handle = process.MainWindowHandle;
SetForegroundWindow(handle);

// if the window is still in the foreground
SendKeys.SendWait("^(s)"); // Ctrl+S

您希望在打开和保存之间发生什么?用户输入?据我所知,你不能
Notepad.exe
需要为此公开一个API,据我所知,它没有。此外,您的代码不会终止它打开的记事本实例,而是终止它找到的第一个记事本实例。@RistoM实际上什么都没有,只需要记事本保存文本文件。保存之前,文件的编码为UCS-2 Little Endian。用记事本保存后,它转到UCS-2 LE BOM。我需要这个文件的编码变成UCS-2 LE BOM。@DavidStockinger我明白了。。。谢谢你提醒我杀戮的过程^^@KateChang好吧,我就是这么想的。我认为这种编码修复在C#中也是可行的,比如System.Text.encoding..OP没有征求其他人对他们可以做的事情的意见,所以这并不能真正回答问题。而且,你甚至没有解释如何实现你的建议,我认为这充其量只是一个评论,你是对的。因此,我在评论中向OP询问了一些额外的信息。在得到一些输入后,我将改进这个答案(或者删除,如果需要玩记事本的话)。