private void CheckProcess(object source, System.Timers.ElapsedEventArgs e)
{
//……
FileStream fs = new FileStream(filePath.Text, FileMode.Open);
StreamReader sr = new StreamReader(fs);
string line;
while ((line = sr.ReadLine()) != null)
{
//......
}
//sr.Close();
//fs.Close();
}
The process cannot access the file 'C:\Users\tylan\Desktop\ConfigurationFile.txt' because it is being used by another process.
上面这个方法我每隔10s种会触发一次,结果是文件can not access,因为被占用着。我觉得肯定是我的输入流这没弄明白,我用using也不好使,close流也不好使。不知道大神能否给出解释呢?应该怎么改?
我还有另外一个方法,其中也涉及了文件流,不过这个方法只执行了一遍。难道有冲突?
1、如果不是有线程修改这个文件,你每10S打开一次好玩吗?
2、一般是没有必要这样编程的,你知道有个东西叫FileSystemWatcher吗?
不知道可以看看这篇文章(其实可以让你自己Google的)
诶嘿!O(∩_∩)O谢谢您的高级意见!
The process cannot access the file 'C:\Users\tylan\Desktop\ConfigurationFile.txt' because it is being used by another process.
进程无法访问文件"C:\Users\tylan\Desktop\ConfigurationFile.txt",因为它是被另一个进程。
可能是你手动打开了这个文件,或者其他进程调用了,还有检查下是不是这个方法,采用多线程同时调用.
您好!没有手动打开,也没有多进程调用这个文件。
换个角度想想,为什么要10秒钟触发一次这个呢?
几年前好像我也这么做过,后来修改为只读一次了,好像当时我还在博客里写过一篇文章,hanxianlong.cnblogs.com
好思路,不过没办法。
文件操作Open后要记得Close,否则会出问题的!
Close啦~还是有问题。
@天外归云: 你的流确实是关了,但是文件操作没有Close呀,你每10秒操作文件一次,在这期间文件要关闭,在下个10秒在重新打开!
@hippieZhou: 怎么关闭呢?我这边看应该是关闭了呀。流关闭了以后还需要怎么做?
应该是被自己占用了.打开之后在程序内加个同步对象,锁一下文件操作代码.
不懂呢……哈哈,应该怎么写呢?
应该是10秒一次执行的时候上一次程序文件还是被打开的,应该去加一个锁,必须等上一次操作完成,才能够允许执行,我们写的windows服务不是就实现了这个吗,可以参考
好想法!我想想该怎么做。
可是怎么检查是否被锁了呢?
会不会是10s触发后还没关闭又触发了
恩呢,我觉得应该是这种情况。