最近项目中用到监测文件夹下文件,并将新的文件剪切到其他路径下。使用c#实现, 从指定路径扫描获取文件,每次获取100个文件,实时监测,将文件分别存到其他路径下,代码如下
//正在复制文件列表
public List<string> CopyFileList;
public string DstDirectory = "c://testfile//"
/// <summary>
/// 扫描指定路径下文件
/// </summary>
public void ScanFiles(string SrcDirectory)
{
try
{
List<string> fileList = Directory.GetFiles(SrcDirectory).ToList();//获取文件列表
if (fileList.Count > 100)
{
fileList.RemoveRange(this.CopyFileCounts, fileList.Count - this.CopyFileCounts); //只获得前100个文件信息
}
foreach (string fileName in fileList)
{
Thread.Sleep(5);
if (!this.CopyFileList.Contains(fileName))
{
ThreadPool.QueueUserWorkItem(this.CopyFileToNewPath, fileName);
}
}
}
catch (Exception ex)
{
LOG.Error(new StringBuilder("扫描指定路径下文件出错:").Append(ex.Message).ToString());
}
}
/// <summary>
/// 复制文件到新路径
/// </summary>
/// <param name="file"></param>
private void CopyFileToNewPath(object sender)
{
if (sender == null)
{
LOG.Error("复制文件到新路径失败,文件名为空");
return;
}
string fileName = sender.ToString();
this.CopyFileList.Add(fileName);
if (!Directory.Exists(Path.GetDirectoryName(DstDirectory )))
{
Directory.CreateDirectory(Path.GetDirectoryName(DstDirectory ));
}
File.Copy(fileName, DstDirectory , true); //将文件拷贝到指定路径下
File.Delete(fileName); //删除已拷贝的文件
this.CopyFileList.Remove(fileName); //文件列表中删除文件
}