private void fileWatcher_Created(object sender, System.IO.FileSystemEventArgs e)
        {
            logger.Debug(e.ChangeType.ToString() + e.FullPath);            // 
            string filename = e.FullPath;
            string subfilename;            string[] files = Directory.GetFiles(filename, "*.*");
            //注意:这里第一次运行程序显示1,后面都是0
            MessageBox.Show(files.Length.ToString());
            if (files.Length > 0)
            {
                subfilename = Path.Combine(filename, files[0]);
            }
            else { subfilename = filename; }            lock (waitingFileList)
            {
                if(!waitingFileList.Contains(filename)){
                    waitingFileList.Enqueue(filename);
                    AddFileList(filename, subfilename);                    
                }
            }
            
        }delegate void addFileList_delegate(string newFilename, string subfilename);
        void AddFileList(string newFilename, string subfilename)
        {
            if (InvokeRequired)
            {
                Invoke(new addFileList_delegate(AddFileList), new object[] { newFilename, subfilename });
                return;
            }
            string filename;            
            filename=subfilename;
            string[] files = Directory.GetFiles(newFilename, "*.*");            
            DirectoryInfo myforlder = new DirectoryInfo(newFilename);
            string IDname = myforlder.Name;            
            int rowNum = convFileList.Rows.Add();
            //convFileList.Rows[rowNum].Cells["ID"].Value = GetNextSequence();
            convFileList.Rows[rowNum].Cells["ID"].Value = IDname;
            convFileList.Rows[rowNum].Cells["inputFilename"].Value = Path.GetFileName(filename); //表示用ファイル名
            convFileList.Rows[rowNum].Cells["inputFilename"].Tag = filename; // 処理用ファイル名フルパス
            convFileList.Rows[rowNum].Cells["type"].Value = "J Pub";// Path.GetExtension(newFilename);
            convFileList.Rows[rowNum].Cells["entryTime"].Value = DateTime.Now.ToString();
            convFileList.Rows[rowNum].Cells["status"].Value = "変換待ち";
        }代码如上(上面代码只是关键部分),问题如下:
这个程序是在一个指定的监视目录下,往里面复制一个文件夹(这个文件夹里同时一定包含一个文件).
现在就是要监视文件夹的创建情况.程序刚开始运行第一次复制文件时夹能找到文件夹下的文件,后面再往里面复制文件时都找不到文件夹下的文件.
请高手指点,万分感激

解决方案 »

  1.   

    你这个不该加到created里去吧?created只运行一次,我瞎猜的
      

  2.   

    复制进去的文件夹名字不一样,所以应该是created
      

  3.   

    奇怪的事在下面代码前加上这句MessageBox.Show(filename.ToString());
    每次都可以了.有谁知道啊    string[] files = Directory.GetFiles(filename, "*.*");
    //注意:这里第一次运行程序显示1,后面都是0
    MessageBox.Show(files.Length.ToString()); 
      

  4.   

                txtInfo.Text = string.Empty;            
                watcher = new FileSystemWatcher();
                watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName;
                watcher.IncludeSubdirectories = true;
                watcher.Created += new FileSystemEventHandler(watcher_Created);
                watcher.Changed += new FileSystemEventHandler(watcher_Changed);
                watcher.Renamed += new RenamedEventHandler(watcher_Renamed);
                watcher.Deleted += new FileSystemEventHandler(watcher_Deleted);
    有个IncludeSubdirectories属性,设置是否监视子目录
      

  5.   

    我知道这个属性,但是现在监视的只是文件夹,难道不可以根据这个文件夹的创建来判断这个文件夹下的文件数吗?
    我的推理不知道对不对.
    我拷贝文件夹和该文件夹下面的文件到监视目录的过程只这样的.
    首先拷贝的是文件夹,还没等文件拷贝进去,(这里面就相差几毫秒的事情),
    程序已经越过string[] files = Directory.GetFiles(filename, "*.*"); 这句了.所以我之前加上MessageBox.Show(filename.ToString()); 问题就解决了.
    因此解决的办法就是加上MessageBox.Show(filename.ToString());改为Thread.Sleep(time);
    time要大于文件的拷贝时间才行,因为是网络上传,如果文件比较大的话,拷贝时间比较长.有没有更好的解决方法啊,谢谢.请高手提示啊