1

我正在使用公共域中不存在的文件类型。该文件是二进制或十六进制的,但是当您双击一个文件以便在记事本中将其作为 .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();

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

/*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,因此我不能像在记事本中那样更改文件扩展名,这就是我尝试这样做的原因。我也花了很多时间搞乱编码,但无济于事。

4

1 回答 1

0

如果它是二进制文件,您可以通过这种方式将其转换为文本并保存:

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);
于 2013-05-29T17:28:14.060 回答