File.WriteAllLines之后未引发SystemFileWatcher事件

NoobCube

成员
已加入
2014年3月2日
留言内容
12
编程经验
Beginner
你好,
我的应用程序写入福彩12选5走势图,并且还在该福彩12选5走势图上设置了systemfilewatcher来监视更改。
当有多个该应用程序实例在运行时,filewatcher用于以下情况:它们都将写入同一福彩12选5走势图,因此将更新该应用程序的所有其他实例。
当我使用writeAllLines或streamWriter等时,不会引发任何事件。
但是当我手动写入此福彩12选5走势图并保存时,它可以工作。
:apthy:
请帮忙
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,563
地点
悉尼,澳大利亚
编程经验
10+
我刚刚测试过,对我来说效果很好。我创建了一个新的WPF项目,并将以下代码添加到默认的Window中:
using System;
using System.IO;
using System.Windows;

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        private FileSystemWatcher fsw = new FileSystemWatcher();

        public MainWindow()
        {
            InitializeComponent();
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            fsw.Path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
            fsw.Filter = "Test.txt";
            fsw.NotifyFilter = NotifyFilters.LastWrite;
            fsw.Changed += fsw_Changed;
            fsw.EnableRaisingEvents = true;
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            var filePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Test.txt");

            File.WriteAllText(filePath, "Goodbye cruel world");
        }

        void fsw_Changed(object sender, FileSystemEventArgs e)
        {
            MessageBox.Show(e.FullPath);
        }
    }
}
直接编辑指定福彩12选5走势图以及单击“按钮”时,都看到了预期的消息。
 

NoobCube

成员
已加入
2014年3月2日
留言内容
12
编程经验
Beginner
你好,
谢谢您的重播!
我做了一些研究,发现当我尝试在局域网驱动器(网络位置)上写入福彩12选5走势图时会发生此问题
我将USB驱动器连接到路由器,并将福彩12选5走势图存储在该路由器上,并在我的应用程序中指定IP地址和目录。
发生的情况是程序将程序写入此福彩12选5走势图时,一切正常,文本被写入该福彩12选5走势图,但未引发filesystemwatcher事件。
(我还为福彩12选5走势图设置了完整的R / W权限)
但是,当我直接写入福彩12选5走势图时,它可以正常工作并引发事件。
当我将福彩12选5走势图的位置更改为PC上的福彩12选5走势图时,一切正常。
这很奇怪,因为在MSDN中他们说Filesystemwatcher适用于网络和本地福彩12选5走势图夹。
我找不到有关此的任何其他信息...

这是我的测试应用代码:
C#:
[COLOR=#000000]namespace [/COLOR][COLOR=#2B91AF]FileSystemWatcherTest2[/COLOR][COLOR=#000000]
[/COLOR][COLOR=#000000]{[/COLOR][COLOR=#000000]
    [/COLOR][COLOR=#00008B]public[/COLOR][COLOR=#00008B]partial[/COLOR][COLOR=#00008B]class[/COLOR][COLOR=#2B91AF]Form1[/COLOR][COLOR=#000000]:[/COLOR][COLOR=#2B91AF]Form[/COLOR][COLOR=#000000]
    [/COLOR][COLOR=#000000]{[/COLOR][COLOR=#000000]
        [/COLOR][COLOR=#00008B]public[/COLOR][COLOR=#00008B]static[/COLOR][COLOR=#2B91AF]int[/COLOR][COLOR=#000000] appId[/COLOR][COLOR=#000000];[/COLOR][COLOR=#000000]
        [/COLOR][COLOR=#00008B]public[/COLOR][COLOR=#00008B]static[/COLOR][COLOR=#2B91AF]FileSystemWatcher[/COLOR][COLOR=#000000] fs[/COLOR][COLOR=#000000];[/COLOR][COLOR=#000000]

        [/COLOR][COLOR=#00008B]public[/COLOR][COLOR=#2B91AF]Form1[/COLOR][COLOR=#000000]()[/COLOR][COLOR=#000000]{[/COLOR][COLOR=#2B91AF]InitializeComponent[/COLOR][COLOR=#000000]();[/COLOR][COLOR=#000000]}[/COLOR][COLOR=#000000]

        [/COLOR][COLOR=#00008B]private[/COLOR][COLOR=#00008B]void[/COLOR][COLOR=#2B91AF]Form1_Load[/COLOR][COLOR=#000000]([/COLOR][COLOR=#00008B]object[/COLOR][COLOR=#000000] sender[/COLOR][COLOR=#000000],[/COLOR][COLOR=#2B91AF]EventArgs[/COLOR][COLOR=#000000] e[/COLOR][COLOR=#000000])[/COLOR][COLOR=#000000]
        [/COLOR][COLOR=#000000]{[/COLOR][COLOR=#000000]
            [/COLOR][COLOR=#2B91AF]Random[/COLOR][COLOR=#000000] rnd [/COLOR][COLOR=#000000]=[/COLOR][COLOR=#00008B]new[/COLOR][COLOR=#2B91AF]Random[/COLOR][COLOR=#000000]([/COLOR][COLOR=#2B91AF]DateTime[/COLOR][COLOR=#000000].[/COLOR][COLOR=#2B91AF]Now[/COLOR][COLOR=#000000].[/COLOR][COLOR=#2B91AF]Second[/COLOR][COLOR=#000000]);[/COLOR][COLOR=#000000]
            appId [/COLOR][COLOR=#000000]=[/COLOR][COLOR=#000000] rnd[/COLOR][COLOR=#000000].[/COLOR][COLOR=#2B91AF]Next[/COLOR][COLOR=#000000]([/COLOR][COLOR=#800000]1[/COLOR][COLOR=#000000],[/COLOR][COLOR=#800000]9999[/COLOR][COLOR=#000000]);[/COLOR][COLOR=#000000]

            [/COLOR][COLOR=#00008B]string[/COLOR][COLOR=#000000] path [/COLOR][COLOR=#000000]=[/COLOR][COLOR=#800000]@"\\IP.Address.here\drive\test.txt"[/COLOR][COLOR=#000000];[/COLOR][COLOR=#000000]

            fs [/COLOR][COLOR=#000000]=[/COLOR][COLOR=#00008B]new[/COLOR][COLOR=#2B91AF]FileSystemWatcher[/COLOR][COLOR=#000000]([/COLOR][COLOR=#800000]@"\\IP.Address.here\drive\"[/COLOR][COLOR=#000000],[/COLOR][COLOR=#800000]"*.txt"[/COLOR][COLOR=#000000]);[/COLOR][COLOR=#000000]
            fs[/COLOR][COLOR=#000000].[/COLOR][COLOR=#2B91AF]EnableRaisingEvents[/COLOR][COLOR=#000000]=[/COLOR][COLOR=#00008B]true[/COLOR][COLOR=#000000];[/COLOR][COLOR=#000000]
            fs[/COLOR][COLOR=#000000].[/COLOR][COLOR=#2B91AF]IncludeSubdirectories[/COLOR][COLOR=#000000]=[/COLOR][COLOR=#00008B]false[/COLOR][COLOR=#000000];[/COLOR][COLOR=#000000]
            fs[/COLOR][COLOR=#000000].[/COLOR][COLOR=#2B91AF]NotifyFilter[/COLOR][COLOR=#000000]=[/COLOR][COLOR=#2B91AF]NotifyFilters[/COLOR][COLOR=#000000].[/COLOR][COLOR=#2B91AF]LastWrite[/COLOR][COLOR=#000000];[/COLOR][COLOR=#000000]
             [/COLOR][COLOR=#808080]/*   NotifyFilters.Attributes | NotifyFilters.CreationTime
                | NotifyFilters.DirectoryName | NotifyFilters.FileName
                | NotifyFilters.LastAccess | NotifyFilters.LastWrite
                | NotifyFilters.Security | NotifyFilters.Size;*/[/COLOR][COLOR=#000000]

            [/COLOR][COLOR=#00008B]if[/COLOR][COLOR=#000000](![/COLOR][COLOR=#2B91AF]File[/COLOR][COLOR=#000000].[/COLOR][COLOR=#2B91AF]Exists[/COLOR][COLOR=#000000]([/COLOR][COLOR=#000000]path[/COLOR][COLOR=#000000]))[/COLOR][COLOR=#000000] 
            [/COLOR][COLOR=#000000]{[/COLOR][COLOR=#000000]
                [/COLOR][COLOR=#2B91AF]File[/COLOR][COLOR=#000000].[/COLOR][COLOR=#2B91AF]Create[/COLOR][COLOR=#000000]([/COLOR][COLOR=#000000]path[/COLOR][COLOR=#000000]);[/COLOR][COLOR=#000000]

                [/COLOR][COLOR=#808080]// set full R/W permissions for everyone[/COLOR][COLOR=#000000]
                [/COLOR][COLOR=#2B91AF]DirectoryInfo[/COLOR][COLOR=#000000] dInfo [/COLOR][COLOR=#000000]=[/COLOR][COLOR=#00008B]new[/COLOR][COLOR=#2B91AF]DirectoryInfo[/COLOR][COLOR=#000000]([/COLOR][COLOR=#000000]path[/COLOR][COLOR=#000000]);[/COLOR][COLOR=#000000]
                [/COLOR][COLOR=#2B91AF]DirectorySecurity[/COLOR][COLOR=#000000] dSecurity [/COLOR][COLOR=#000000]=[/COLOR][COLOR=#000000] dInfo[/COLOR][COLOR=#000000].[/COLOR][COLOR=#2B91AF]GetAccessControl[/COLOR][COLOR=#000000]();[/COLOR][COLOR=#000000]
                dSecurity[/COLOR][COLOR=#000000].[/COLOR][COLOR=#2B91AF]AddAccessRule[/COLOR][COLOR=#000000]([/COLOR][COLOR=#00008B]new[/COLOR][COLOR=#2B91AF]FileSystemAccessRule[/COLOR][COLOR=#000000]([/COLOR][COLOR=#00008B]new[/COLOR][COLOR=#2B91AF]SecurityIdentifier[/COLOR][COLOR=#000000]([/COLOR][COLOR=#2B91AF]WellKnownSidType[/COLOR][COLOR=#000000].[/COLOR][COLOR=#2B91AF]WorldSid[/COLOR][COLOR=#000000],[/COLOR][COLOR=#00008B]null[/COLOR][COLOR=#000000]),[/COLOR][COLOR=#2B91AF]FileSystemRights[/COLOR][COLOR=#000000].[/COLOR][COLOR=#2B91AF]FullControl[/COLOR][COLOR=#000000],[/COLOR][COLOR=#2B91AF]InheritanceFlags[/COLOR][COLOR=#000000].[/COLOR][COLOR=#2B91AF]ObjectInherit[/COLOR][COLOR=#000000]|[/COLOR][COLOR=#2B91AF]InheritanceFlags[/COLOR][COLOR=#000000].[/COLOR][COLOR=#2B91AF]ContainerInherit[/COLOR][COLOR=#000000],[/COLOR][COLOR=#2B91AF]PropagationFlags[/COLOR][COLOR=#000000].[/COLOR][COLOR=#2B91AF]NoPropagateInherit[/COLOR][COLOR=#000000],[/COLOR][COLOR=#2B91AF]AccessControlType[/COLOR][COLOR=#000000].[/COLOR][COLOR=#2B91AF]Allow[/COLOR][COLOR=#000000]));[/COLOR][COLOR=#000000]
                dInfo[/COLOR][COLOR=#000000].[/COLOR][COLOR=#2B91AF]SetAccessControl[/COLOR][COLOR=#000000]([/COLOR][COLOR=#000000]dSecurity[/COLOR][COLOR=#000000]);[/COLOR][COLOR=#000000]
            [/COLOR][COLOR=#000000]}[/COLOR][COLOR=#000000]

            [/COLOR][COLOR=#808080]// write text to file to raise fs_changed event[/COLOR][COLOR=#000000]
            [/COLOR][COLOR=#2B91AF]StreamWriter[/COLOR][COLOR=#000000] sw [/COLOR][COLOR=#000000]=[/COLOR][COLOR=#00008B]new[/COLOR][COLOR=#2B91AF]StreamWriter[/COLOR][COLOR=#000000]([/COLOR][COLOR=#000000]path[/COLOR][COLOR=#000000],[/COLOR][COLOR=#00008B]true[/COLOR][COLOR=#000000]);[/COLOR][COLOR=#000000]
            sw[/COLOR][COLOR=#000000].[/COLOR][COLOR=#2B91AF]WriteLine[/COLOR][COLOR=#000000]([/COLOR][COLOR=#2B91AF]DateTime[/COLOR][COLOR=#000000].[/COLOR][COLOR=#2B91AF]Now[/COLOR][COLOR=#000000]+[/COLOR][COLOR=#800000]" | App Id: "[/COLOR][COLOR=#000000]+[/COLOR][COLOR=#000000] appId [/COLOR][COLOR=#000000]+[/COLOR][COLOR=#800000]" | File changed..."[/COLOR][COLOR=#000000]);[/COLOR][COLOR=#000000]
            sw[/COLOR][COLOR=#000000].[/COLOR][COLOR=#2B91AF]Close[/COLOR][COLOR=#000000]();[/COLOR][COLOR=#000000]
            sw[/COLOR][COLOR=#000000].[/COLOR][COLOR=#2B91AF]Dispose[/COLOR][COLOR=#000000]();[/COLOR][COLOR=#000000]
            GC[/COLOR][COLOR=#000000].[/COLOR][COLOR=#2B91AF]Collect[/COLOR][COLOR=#000000]();[/COLOR][COLOR=#808080]// just in case... [/COLOR][COLOR=#000000]

            fs[/COLOR][COLOR=#000000].[/COLOR][COLOR=#2B91AF]Changed[/COLOR][COLOR=#000000]+=[/COLOR][COLOR=#000000] fs_Changed[/COLOR][COLOR=#000000];[/COLOR][COLOR=#808080]// raise event only for the next instance of this app[/COLOR][COLOR=#000000]
        [/COLOR][COLOR=#000000]}[/COLOR][COLOR=#000000]

        [/COLOR][COLOR=#00008B]private[/COLOR][COLOR=#00008B]static[/COLOR][COLOR=#00008B]void[/COLOR][COLOR=#000000] fs_Changed[/COLOR][COLOR=#000000]([/COLOR][COLOR=#00008B]object[/COLOR][COLOR=#000000] sender[/COLOR][COLOR=#000000],[/COLOR][COLOR=#2B91AF]FileSystemEventArgs[/COLOR][COLOR=#000000] e[/COLOR][COLOR=#000000])[/COLOR][COLOR=#000000]
        [/COLOR][COLOR=#000000]{[/COLOR][COLOR=#000000]
            [/COLOR][COLOR=#2B91AF]MessageBox[/COLOR][COLOR=#000000].[/COLOR][COLOR=#2B91AF]Show[/COLOR][COLOR=#000000]([/COLOR][COLOR=#000000]appId [/COLOR][COLOR=#000000]+ [/COLOR][COLOR=#800000]" | file changed!"[/COLOR][COLOR=#000000]);[/COLOR][COLOR=#000000]
        [/COLOR][COLOR=#000000]}[/COLOR][COLOR=#000000]
    [/COLOR][COLOR=#000000]}[/COLOR][COLOR=#000000]
[/COLOR][COLOR=#000000]}[/COLOR]
 

约翰·H

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
1,076
地点
挪威
编程经验
10+
处理FileSystemWatcher.Error事件,看看那里是否有更多信息。
 

NoobCube

成员
已加入
2014年3月2日
留言内容
12
编程经验
Beginner
我只是试了一下,错误事件也没有引发...:很糟糕:

Idk该怎么办,我无法继续进行我的应用程序更新,因为它取决于此内容
我虽然有另一种方法,但是使用FileSystemWatcher是最有效的方法
还有其他方法吗?但没有计时器?
 

狂暴风暴

知名会员
已加入
2014年8月6日
留言内容
85
地点
南非鲁德普特
编程经验
10+
C#:
[COLOR=#000000]
            [/COLOR][COLOR=#808080]// write text to file to raise fs_changed event[/COLOR][COLOR=#000000]
            [/COLOR][COLOR=#2B91AF]StreamWriter[/COLOR][COLOR=#000000] sw [/COLOR][COLOR=#000000]=[/COLOR][COLOR=#00008B]new[/COLOR][COLOR=#2B91AF]StreamWriter[/COLOR][COLOR=#000000]([/COLOR][COLOR=#000000]path[/COLOR][COLOR=#000000],[/COLOR][COLOR=#00008B]true[/COLOR][COLOR=#000000]);[/COLOR][COLOR=#000000]
            sw[/COLOR][COLOR=#000000].[/COLOR][COLOR=#2B91AF]WriteLine[/COLOR][COLOR=#000000]([/COLOR][COLOR=#2B91AF]DateTime[/COLOR][COLOR=#000000].[/COLOR][COLOR=#2B91AF]Now[/COLOR][COLOR=#000000]+[/COLOR][COLOR=#800000]" | App Id: "[/COLOR][COLOR=#000000]+[/COLOR][COLOR=#000000] appId [/COLOR][COLOR=#000000]+[/COLOR][COLOR=#800000]" | File changed..."[/COLOR][COLOR=#000000]);[/COLOR][COLOR=#000000]
            sw[/COLOR][COLOR=#000000].[/COLOR][COLOR=#2B91AF]Close[/COLOR][COLOR=#000000]();[/COLOR][COLOR=#000000]
            sw[/COLOR][COLOR=#000000].[/COLOR][COLOR=#2B91AF]Dispose[/COLOR][COLOR=#000000]();[/COLOR][COLOR=#000000]
            GC[/COLOR][COLOR=#000000].[/COLOR][COLOR=#2B91AF]Collect[/COLOR][COLOR=#000000]();[/COLOR][COLOR=#808080]// just in case... [/COLOR][COLOR=#000000]

            fs[/COLOR][COLOR=#000000].[/COLOR][COLOR=#2B91AF]Changed[/COLOR][COLOR=#000000]+=[/COLOR][COLOR=#000000] fs_Changed[/COLOR][COLOR=#000000];[/COLOR][COLOR=#808080]// raise event only for the next instance of this app[/COLOR][COLOR=#000000]
[/COLOR][COLOR=#000000]    [/COLOR][COLOR=#000000]}[/COLOR][COLOR=#000000]
[/COLOR][COLOR=#000000]}[/COLOR]
写入福彩12选5走势图后,添加更改的事件处理程序。为时已晚 ;) (向上)将其移至初始化filesystemwatcher的位置。
 

NoobCube

成员
已加入
2014年3月2日
留言内容
12
编程经验
Beginner
我这样做是因为我启动了该应用程序的多个实例,并且我希望事件仅在该应用程序的另一个实例启动时引发...
顺便说一句,我认为该事件即使在代码之后仍然会触发。

关于我的问题:
我在MS或他们说减小/增加filesystemwatcher的缓冲区大小的地方找到了论坛帖子,我试图将其设置为65000、51200、100等,但仍然无法正常工作...
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,563
地点
悉尼,澳大利亚
编程经验
10+
我认为该事件即使在代码之后也会触发。
当然,将引发该事件,但是如果您尚未注册用于处理该事件的方法,则在引发该事件时将不会调用您的方法。
 
最佳 底部