none
顺序处理文件用timer好还是用filesystemwatcher好? RRS feed

  • 问题

  • 我的程序去抓取一个文件夹中的文件进行先进先出处理.当地一个为处理完(由一个按键出发处理完毕事件)再处理下一个文件.请问用timer好还是用filesystemwatcher来处理好?

    是否先把这些文件放到一个队列里面,然后再逐个处理?用timer和filesystemwatcher会不会第一个文件没被处理完就处理第二个了?还是用线程处理比较好?


    :)Ex
    2010年12月22日 3:02

答案

  • 使用單線程處理,把文件放到列隊中,處理完一個時回拋處理完的訊息,然後再處理下一個,應該不需要用到 Timer 或 filesystemwatcher
    歡迎參觀我的Blog.NET菜鳥自救會
    2010年12月22日 3:45
  • dear
    依照您的流程所述,因为是顺序启动,所以不需要使用filesystemwatcher或Timer

    timer有三种
    System.Timers.Timer
    System.Threading.Timer
    System.Windows.Forms.Timer

    关于Timer你可参考
    http://www.dotblogs.com.tw/billchung/archive/2009/04/18/8044.aspx

    filesystemwatcher则是不断在背景监视资料夹,资料夹有变动时就会抛出一个事件,你也可以利用他来当控制旗标。
    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    2010年12月22日 3:54
  • 有个问题,比如我第一次开程序,文件夹里面有好多文件了,然后我一个一个处理,但是同时又有新的文件进来,用线程处理的话会不会有问题?


    :)Ex


    您好

    我會把文件放到列隊中,處理完一個文件時,將文件移動到另外一個資料夾,然後再處理下一個,當列隊中的文件都處理時,再重新讀取資料夾是否有文件,然後再將文件放到列隊中,然後作循環處理


    歡迎參觀我的Blog.NET菜鳥自救會
    2010年12月22日 8:58
  • 我也同意使用队列。参考 System.Collections.Generic.Queue<T>。

    先把一个文件夹中的所有文件扔到队列中去,然后利用 FileSystemWatcher 监视该文件夹,如果文件有变动,如有新文件或删除了文件,则从队列里面把它相应的增加/删除。这里还需要一个读写锁 (参考 System.Threading.ReaderWriterSlim),以确保在对指定文件操作时,其他程序没有更改该文件。


    Mark Zhou
    2010年12月22日 9:07
  • dear
    小欧兄的逻辑就像是在程式码里的变数一样,你需要有两个容器来装,一个存放是已处理过的文件,一个存放尚未处理的文件,以下问题是你还需要考虑的
    ●已读取过的文件是否还会被拿去修改,若有可能会被修改,你必须处理同时读写问题
    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    2010年12月22日 16:28

全部回复

  • timer的内部模式是怎么样的?如果一个timer中的时间未处理完是否interval一到就会处理下一个流程?

    filesystemwatcher没办法停止的,感觉不能控制


    :)Ex
    2010年12月22日 3:12
  • 使用單線程處理,把文件放到列隊中,處理完一個時回拋處理完的訊息,然後再處理下一個,應該不需要用到 Timer 或 filesystemwatcher
    歡迎參觀我的Blog.NET菜鳥自救會
    2010年12月22日 3:45
  • dear
    依照您的流程所述,因为是顺序启动,所以不需要使用filesystemwatcher或Timer

    timer有三种
    System.Timers.Timer
    System.Threading.Timer
    System.Windows.Forms.Timer

    关于Timer你可参考
    http://www.dotblogs.com.tw/billchung/archive/2009/04/18/8044.aspx

    filesystemwatcher则是不断在背景监视资料夹,资料夹有变动时就会抛出一个事件,你也可以利用他来当控制旗标。
    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    2010年12月22日 3:54
  • 有个问题,比如我第一次开程序,文件夹里面有好多文件了,然后我一个一个处理,但是同时又有新的文件进来,用线程处理的话会不会有问题?


    :)Ex
    2010年12月22日 5:50
  • 有个问题,比如我第一次开程序,文件夹里面有好多文件了,然后我一个一个处理,但是同时又有新的文件进来,用线程处理的话会不会有问题?


    :)Ex


    您好

    我會把文件放到列隊中,處理完一個文件時,將文件移動到另外一個資料夾,然後再處理下一個,當列隊中的文件都處理時,再重新讀取資料夾是否有文件,然後再將文件放到列隊中,然後作循環處理


    歡迎參觀我的Blog.NET菜鳥自救會
    2010年12月22日 8:58
  • 我也同意使用队列。参考 System.Collections.Generic.Queue<T>。

    先把一个文件夹中的所有文件扔到队列中去,然后利用 FileSystemWatcher 监视该文件夹,如果文件有变动,如有新文件或删除了文件,则从队列里面把它相应的增加/删除。这里还需要一个读写锁 (参考 System.Threading.ReaderWriterSlim),以确保在对指定文件操作时,其他程序没有更改该文件。


    Mark Zhou
    2010年12月22日 9:07
  • dear
    小欧兄的逻辑就像是在程式码里的变数一样,你需要有两个容器来装,一个存放是已处理过的文件,一个存放尚未处理的文件,以下问题是你还需要考虑的
    ●已读取过的文件是否还会被拿去修改,若有可能会被修改,你必须处理同时读写问题
    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    2010年12月22日 16:28