c#读取被占用的文件方法

前言

最近在写一个监控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];

// 使用FileShare.ReadWrite共享模式读取文本内容
FileStream fs = new FileStream(Path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

// 使用StreamReader读取文件最后一行
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# 读取其他程序正打开的文件的时“正由另一进程使用,因此该进程无法访问该文件。”的问题解决方法