前言 最近在写一个监控x264处理进度的命令行程序,使用管道符|
是获取不到的,思路是bat运行后重定向到文本,bat的type可以读取但是内容不完整,最后使用c#写了一个。
代码 主要是StreamReader
要换一种方式读取文本,使用FileShare.ReadWrite
共享模式,具体方法转参考文献。
1 2 FileStream fs = new FileStream(Path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); StreamReader sr = new StreamReader(fs, System.Text.Encoding.Default);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 namespace FileShareReadWriteDemo { class Program { static void Main (string [] args ) { string Path = args[0 ]; FileStream fs = new FileStream(Path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); string line; using (StreamReader sr = new StreamReader(fs, System.Text.Encoding.Default)) { string lastLine = null ; while ((line = sr.ReadLine()) != null ) { lastLine = line; } if (lastLine != null ) { string keyWord1 = "kb/s, eta" ; string keyWord2 = "encoded" ; string keyWord3 = "^C" ; if (lastLine.Contains(keyWord1)) { string [] arr = lastLine.Split(' ' ); string progress = arr[0 ]; string time = arr[8 ]; Console.WriteLine("进度:" + progress + " 剩余时间:" + time); } if (lastLine.Contains(keyWord2)) { Console.WriteLine("已完成" ); } if (lastLine.Contains(keyWord3)) { Console.WriteLine("已停止" ); } } } } } }
参考文献 c# 读取其他程序正打开的文件的时“正由另一进程使用,因此该进程无法访问该文件。”的问题解决方法