2016-08-11 61 views
-1

当我的应用程序运行代码Directory.GetFiles()时,我需要排除磁盘上大小为0 kb的文件,此应用程序使用Windows Server Resource Manager文件并每隔5分钟触发一次以扫描特定文件中的文件并评估文件夹的内容,但有时,当任务处于活动状态时,由用户短时加载文件,当用户尝试再次上载文件时,出现错误以更正它,必须重新启动IIS,因为锁定处理文件。Directory.getFiles exclude 0 kb文件

因此我需要排除大小为0 kb的文件,即使用户也不会结束文件。

我用C#

+0

你能不能只检查文件的大小? – Chris

+0

你需要检查文件的大小 –

+0

是的,但是当检查大小中断加载的用户文件 – Josue0716

回答

1

使用从DirectoryInfo实例返回FileInfo实例的枚举GetFiles方法工作。 FileInfo类具有关于文件长度的信息。

DirectoryInfo di = new DirectoryInfo(Server.MapPath("~/APP_DATA")); 
foreach(FileInfo fi in di.GetFiles("*.*", SearchOption.TopDirectoryOnly)) 
{ 
    if(fi.Length != 0) 
    { 
    ... process the file 
    ... fi.Name 
    } 
} 
+0

确定,但是这种方法不会中断用户文件的加载吗? – Josue0716

+0

为什么它应该?目前还不清楚谁锁定了你的文件。 – Steve

0

我解决我的问题与此功能:

protected virtual bool IsFileLocked(FileInfo file) 
    { 
     FileStream stream = null; 

     try 
     { 
      stream = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None); 
     } 
     catch (IOException) 
     { 
      return true; 
     } 
     finally 
     { 
      if (stream != null) 
       stream.Close(); 
     } 

     //file is not locked 
     return false; 
    } 

如果该文件被锁定,因为用户仍然上传到服务器