局域网文件共享,不实时刷新!

时间:2021-12-22 09:40:56
win10访问win7局域网共享的日志文件,win7上面基本上1秒更新添加一行记录,是txt。
如果win7关机后重新开启。有概率win10*问到的共享文件还是重启之前的(直接打开共享文件查看的,)。必须要重启win10才能访问到最新的共享文件。
之前是win7访问win7也不行,win7是连断开连接都是没反应!
请问共享文件是不是有缓存,如果有怎么刷新?百度上没刷到!

 void Read_today_data(string location)//全部读取
        {
            string datetime1 = System.DateTime.Now.ToString("yyyyMMdd");        
            {
                FileStream fs = new FileStream(location, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                StreamReader sr = new StreamReader(fs);
                while (sr.Peek() >= 0)
                {
                    string nextLine = sr.ReadLine();
                    if (nextLine.Contains(datetime1))
                    {
                        if (nextLine.Contains("OK"))
                        {
                            if (nextLine.Contains(checksum0))
                            {
                                string number1 = nextLine.Split(' ')[1];
                                if (number1.Length >= 8)
                                {
                                    list1.Add(number1);
                                }
                            }
                        }
                    }
                }
                fs.Flush();
                fs.Close();
                sr.Close();
            }    
        }

7 个解决方案

#1


注意,一个文件不能同时被多个进程操作。。。一个进程在读写的时候,另一个并不能操作,
所以你以文件作为标识,有的时候回发生锁定,建议换个方法,用管道或者socket 通信,比较安全。。。

#2


多进程通过文件进行交互,需要处理好同步
之前用过两种方案
1。每次有新的数据,就生成新的文件,文件名称和生成时间绑定。
     lz说的情况,其实就是A每秒生成一个数据文件;B读取文件后将文件删除。
2。如果文件是固定名称。那么写入时,最好先写到一个临时文件,数据保存完成后,
再将临时文件覆盖文件。

#3


引用 1 楼 DOwnstairs 的回复:
注意,一个文件不能同时被多个进程操作。。。一个进程在读写的时候,另一个并不能操作,
所以你以文件作为标识,有的时候回发生锁定,建议换个方法,用管道或者socket 通信,比较安全。。。

感觉不是有缓存,就是有什么锁,重启就触发了。
那个日志文件是之前的测试设备生成的,没办法改他的软件。现在有很低概率触发这个异常,就是不知道怎么搞得完美点。

#4


引用 2 楼 xian_wwq 的回复:
多进程通过文件进行交互,需要处理好同步
之前用过两种方案
1。每次有新的数据,就生成新的文件,文件名称和生成时间绑定。
     lz说的情况,其实就是A每秒生成一个数据文件;B读取文件后将文件删除。
2。如果文件是固定名称。那么写入时,最好先写到一个临时文件,数据保存完成后,
再将临时文件覆盖文件。

那个win7上的测试软件改不了了。在win10那台机器上,我是直接用我的电脑打开那个共享文件夹的,里面不是最新的。所以代码也是,访问不到最新。

#5


写的很好,很有意思,值得一看

#6


停止读取后。重置共享凭据。用命令行。
ping 127.0.0.1 -n 6 >nul
cmdkey /delete:192.168.0.111
ping 127.0.0.1 -n 6 >nul
cmdkey /add:192.168.0.111 /user:guest /pass:""

#1


注意,一个文件不能同时被多个进程操作。。。一个进程在读写的时候,另一个并不能操作,
所以你以文件作为标识,有的时候回发生锁定,建议换个方法,用管道或者socket 通信,比较安全。。。

#2


多进程通过文件进行交互,需要处理好同步
之前用过两种方案
1。每次有新的数据,就生成新的文件,文件名称和生成时间绑定。
     lz说的情况,其实就是A每秒生成一个数据文件;B读取文件后将文件删除。
2。如果文件是固定名称。那么写入时,最好先写到一个临时文件,数据保存完成后,
再将临时文件覆盖文件。

#3


引用 1 楼 DOwnstairs 的回复:
注意,一个文件不能同时被多个进程操作。。。一个进程在读写的时候,另一个并不能操作,
所以你以文件作为标识,有的时候回发生锁定,建议换个方法,用管道或者socket 通信,比较安全。。。

感觉不是有缓存,就是有什么锁,重启就触发了。
那个日志文件是之前的测试设备生成的,没办法改他的软件。现在有很低概率触发这个异常,就是不知道怎么搞得完美点。

#4


引用 2 楼 xian_wwq 的回复:
多进程通过文件进行交互,需要处理好同步
之前用过两种方案
1。每次有新的数据,就生成新的文件,文件名称和生成时间绑定。
     lz说的情况,其实就是A每秒生成一个数据文件;B读取文件后将文件删除。
2。如果文件是固定名称。那么写入时,最好先写到一个临时文件,数据保存完成后,
再将临时文件覆盖文件。

那个win7上的测试软件改不了了。在win10那台机器上,我是直接用我的电脑打开那个共享文件夹的,里面不是最新的。所以代码也是,访问不到最新。

#5


写的很好,很有意思,值得一看

#6


停止读取后。重置共享凭据。用命令行。
ping 127.0.0.1 -n 6 >nul
cmdkey /delete:192.168.0.111
ping 127.0.0.1 -n 6 >nul
cmdkey /add:192.168.0.111 /user:guest /pass:""