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 = "変換待ち";
}代码如上(上面代码只是关键部分),问题如下:
这个程序是在一个指定的监视目录下,往里面复制一个文件夹(这个文件夹里同时一定包含一个文件).
现在就是要监视文件夹的创建情况.程序刚开始运行第一次复制文件时夹能找到文件夹下的文件,后面再往里面复制文件时都找不到文件夹下的文件.
请高手指点,万分感激
解决方案 »
- C#计算器的backspace键怎么写代码(菜鸟求助)
- 求教.NET连接mysql的编码设置问题
- 知道一个句柄“00050574”,怎么把他转为Handle值啊?
- 类声明的问题,也许很简单也许很难
- Hashtable操作,我必须遍历,但在循环中Hashtable会改变,导致枚举值不能使用异常..急求大侠帮忙..
- 请问我怎么关闭对数据库的连接???
- 各位我用的是visual studio .net 2003命令提示编译的时候出现的问题
- 如何使下载控件在工具栏中显示
- 关于VS2010设置的问题
- PDF格式十进制文件头编码是多少?
- datagridview默认都是白色的问题
- 表格的表头,添加点击菜单的问题,急!
每次都可以了.有谁知道啊 string[] files = Directory.GetFiles(filename, "*.*");
//注意:这里第一次运行程序显示1,后面都是0
MessageBox.Show(files.Length.ToString());
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属性,设置是否监视子目录
我的推理不知道对不对.
我拷贝文件夹和该文件夹下面的文件到监视目录的过程只这样的.
首先拷贝的是文件夹,还没等文件拷贝进去,(这里面就相差几毫秒的事情),
程序已经越过string[] files = Directory.GetFiles(filename, "*.*"); 这句了.所以我之前加上MessageBox.Show(filename.ToString()); 问题就解决了.
因此解决的办法就是加上MessageBox.Show(filename.ToString());改为Thread.Sleep(time);
time要大于文件的拷贝时间才行,因为是网络上传,如果文件比较大的话,拷贝时间比较长.有没有更好的解决方法啊,谢谢.请高手提示啊