保存c#中某个特定进程打开的文件

本文关键字:进程 文件 保存 | 更新日期: 2023-09-27 18:16:00

我正在处理一个在公共领域不存在的文件类型。该文件是二进制或十六进制的,但是以前写过一个批处理文件,当你双击一个文件以便在记事本中以.txt文件的形式打开它时运行。

我要做的就是在我的程序中打开这个文件,然后在它打开时保存它,这样它现在就是一个。txt文件,我可以使用它。

所以我开始批处理文件过程,文件本身是参数。

/*Start the  batch file and open file (as an argument)
         * Then it'll be viewable as a text file 
         * */
        Process process = new Process();
        process.StartInfo.FileName = "C:/batchfile.bat";
        process.StartInfo.Arguments = "C:/file.ext";
        process.StartInfo.UseShellExecute = false;
        process.StartInfo.RedirectStandardOutput = true;
        process.Start();

然后查看是否有任何当前运行的进程具有文件扩展名并在记事本中运行,使用Regex:

/*Using a regex pattern, we can see if a wtd file has been opened
         * If there is, it's added to an array called matchArr
         * */
String pattern = "^.*ext.*Notepad.*$";
        Regex rgx = new Regex(pattern, RegexOptions.IgnoreCase);
        Process[] processes = Process.GetProcesses();
        int useMatch = 0;
        String[] matchArr = new String[100];
        foreach (var proc in processes)
        {
            MatchCollection matches = rgx.Matches(proc.MainWindowTitle);
            if (!string.IsNullOrEmpty(proc.MainWindowTitle))
                if (matches.Count > 0)
                {
                    useMatch = matches.Count;
                    for (int i = 0; i < useMatch; i++)
                    {
                        matchArr[i] = proc.MainWindowTitle;
                        String blah = proc.Modules[0].FileName;
                        string path = System.IO.Path.GetFullPath(proc.MainWindowTitle);
                        Console.WriteLine("Path:" +path);
                        StreamReader stream = new StreamReader(blah);
                        FileStream fstr = new FileStream("C:/newName.txt", FileMode.Create, FileAccess.Write);
                        using (StreamWriter strw = new StreamWriter(fstr))
                        {
                            strw.WriteLine(stream);
                            Console.WriteLine("Array is : " + matchArr[i].ToString());
                        }
                    }
                }
        }

我一整天都在谷歌上搜索——我的方法一定是出了什么问题,但我没想到要找出这个问题应该这么难。任何帮助都将是非常感激的——我也不是c#的母语,所以请原谅任何糟糕的编码实践。

谁能帮我弄清楚如何将这个文件更改为。txt文件?此外,c#显然不会将其读取为。txt,所以我不能像在记事本中那样更改文件扩展名,这就是为什么我试图这样做的原因。我还花了很多时间在编码上,但无济于事。

保存c#中某个特定进程打开的文件

如果它是二进制的,你可以把它转换成文本并保存:

string myString;
using (FileStream fs = new FileStream(YourBinaryFile, FileMode.Open))
using (BinaryReader br = new BinaryReader(fs))
{
    byte[] bin = br.ReadBytes(Convert.ToInt32(fs.Length));
    myString = Convert.ToBase64String(bin);
}

然后你可以这样写到文件中:

File.WriteAllText(YourTargetTxtFile, myString);

或者你觉得合适就用它。希望这对你有帮助!

编辑:

您也可以使用此函数指定编码,重载:

File.WriteAllText(file, contents, encoding);