Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在C语言中检测被截断的文件#_C#_.net - Fatal编程技术网

C# 如何在C语言中检测被截断的文件#

C# 如何在C语言中检测被截断的文件#,c#,.net,C#,.net,如果我在共享访问模式下读取文本文件,而另一个进程将其截断,那么最简单的检测方法是什么?(我排除了定期刷新FileInfo对象以检查其大小的明显选择)是否有一些方便的方法来捕获事件?(Filewatcher?) 如果您正在开发windows窗体应用程序,可以从工具箱中拖放它 下面是一些用法示例: private void myForm_Load(object sender, EventArgs e) { var fileWatcher = new System.IO.FileSystemW

如果我在共享访问模式下读取文本文件,而另一个进程将其截断,那么最简单的检测方法是什么?(我排除了定期刷新FileInfo对象以检查其大小的明显选择)是否有一些方便的方法来捕获事件?(Filewatcher?)

如果您正在开发windows窗体应用程序,可以从工具箱中拖放它

下面是一些用法示例:

private void myForm_Load(object sender, EventArgs e)
{
    var fileWatcher = new System.IO.FileSystemWatcher();

    // Monitor changes to PNG files in C:\temp and subdirectories
    fileWatcher.Path = @"C:\temp";
    fileWatcher.IncludeSubdirectories = true;
    fileWatcher.Filter = @"*.png";

    // Attach event handlers to handle each file system events
    fileWatcher.Changed += fileChanged;
    fileWatcher.Created += fileCreated;
    fileWatcher.Renamed += fileRenamed;

    // Start monitoring!
    fileWatcher.EnableRaisingEvents = true;
}

void fileRenamed(object sender, System.IO.FileSystemEventArgs e)
{
    // a file has been renamed!
}

void fileCreated(object sender, System.IO.FileSystemEventArgs e)
{
    // a file has been created!
}

void fileChanged(object sender, System.IO.FileSystemEventArgs e)
{
    // a file is modified!
}

它位于System.IO和System.dll中,因此您应该能够在大多数类型的项目中使用它。

有,它被称为

如果您正在开发windows窗体应用程序,可以从工具箱中拖放它

下面是一些用法示例:

private void myForm_Load(object sender, EventArgs e)
{
    var fileWatcher = new System.IO.FileSystemWatcher();

    // Monitor changes to PNG files in C:\temp and subdirectories
    fileWatcher.Path = @"C:\temp";
    fileWatcher.IncludeSubdirectories = true;
    fileWatcher.Filter = @"*.png";

    // Attach event handlers to handle each file system events
    fileWatcher.Changed += fileChanged;
    fileWatcher.Created += fileCreated;
    fileWatcher.Renamed += fileRenamed;

    // Start monitoring!
    fileWatcher.EnableRaisingEvents = true;
}

void fileRenamed(object sender, System.IO.FileSystemEventArgs e)
{
    // a file has been renamed!
}

void fileCreated(object sender, System.IO.FileSystemEventArgs e)
{
    // a file has been created!
}

void fileChanged(object sender, System.IO.FileSystemEventArgs e)
{
    // a file is modified!
}

它位于System.IO和System.dll中,因此您应该能够在大多数类型的项目中使用它。

只是需要仔细研究一下;它可能不适用于您的情况:

chakrit的解决方案对于您所要求的是正确的,但我必须问一下——为什么您在读取一个文件,而另一个进程会截断它


特别是,如果你没有一些同步,同时读/写文件并不是特别安全,你可能会发现你还有其他神秘的问题。

只是需要仔细考虑一下;它可能不适用于您的情况:

chakrit的解决方案对于您所要求的是正确的,但我必须问一下——为什么您在读取一个文件,而另一个进程会截断它


特别是,如果您没有一些同步,那么并发地读/写文件并不是特别安全,您可能会发现您还有其他神秘的问题。

FSW不能可靠地工作,它是异步的。假设没有得到异常,当文件被截断时,StreamReader.ReadLine()将返回null。然后检查大小是否改变。当心不可避免的竞争条件,您需要验证有关计时的假设。

FSW无法可靠工作,它是异步的。假设没有得到异常,当文件被截断时,StreamReader.ReadLine()将返回null。然后检查大小是否改变。当心不可避免的竞争条件,您需要验证有关计时的假设。

我实际上是在为windows创建一个tail命令。。。我真的不想提及这一点,因为现在我已经知道了,互联网上到处都有人因为已经有很多其他的键盘实现而痛击键盘。我实际上是在为windows创建一个tail命令。。。我真的不想提及这一点,因为现在我已经提到了,互联网上到处都有人因为已经有很多其他的键盘实现而被键盘击毙。正如我的帖子所暗示的,我想到了这一点,但我很好奇是否还有其他解决方案。不管怎样,我还是要投票支持你的答案,因为你给出了这么好的示例代码!;-)好。。你在要求一个“方便”的方法。。。我认为没有比这更方便的了。。。除了重新设计你解决问题的方法,正如@petercrabtree在下面所说的那样。感谢+1,我正在接近获得另一个能力,所以:-)尽管我最终以不同的方式解决了它,这可能是最好的答案,所以你可以这样做。谢谢。正如我的帖子所暗示的,我想到了这一点,但我很好奇是否还有其他解决办法。不管怎样,我还是要投票支持你的答案,因为你给出了这么好的示例代码!;-)好。。你在要求一个“方便”的方法。。。我认为没有比这更方便的了。。。除了重新设计你解决问题的方法,正如@petercrabtree在下面所说的那样。感谢+1,我正在接近获得另一个能力,所以:-)尽管我最终以不同的方式解决了它,这可能是最好的答案,所以你可以这样做。谢谢,是的。但是ReadLine()在文件末尾时也返回null。我想只要得到空值,我就可以检查文件大小。我想我会试试看。谢谢顺便说一句,异步并不意味着它不可靠。(或者这不是你的意思吗?)因为它是异步的,所以在收到FSW通知之前,你更有可能得到EOF。这是一个不可避免的比赛条件,你可以避免。是的。但是ReadLine()在文件末尾时也返回null。我想只要得到空值,我就可以检查文件大小。我想我会试试看。谢谢顺便说一句,异步并不意味着它不可靠。(或者这不是你的意思吗?)因为它是异步的,所以在收到FSW通知之前,你更有可能得到EOF。这是一个不可避免的比赛条件,你可以避免。