2016-12-15 123 views
-2

我在Visual Studio Community 2015中的c#程序的最后部分,但遇到了问题。2尝试构建Visual Studio程序时出现错误

我使用这个代码来设置缓存限制:

private void DeleteOldFilesIfOverFolderLimit(string folderPath, 
 
              long folderSizeLimit, 
 
              long amountToDelete) 
 
{ 
 
    var folder = new DirectoryInfo(folderPath); 
 
    var files = folder.GetFiles(); 
 
    var folderSize = files.Sum(fi => fi.Length); 
 
    
 
    if (folderSize > folderSizeLimit) 
 
    { 
 
     // Sort the list of files with the oldest first. 
 
     Array.Sort(files, 
 
        (fi1, fi2) => fi1.CreationTime.CompareTo(fi2.CreationTime)); 
 
    
 
     var amountDeleted = 0L; 
 
    
 
     foreach (var file in files) 
 
     { 
 
      amountDeleted += file.Length; 
 
      file.Delete(); 
 
    
 
      if (amountDeleted >= amountToDelete) 
 
      { 
 
       break; 
 
      } 
 
    
 
     } 
 
    } 
 
}

这里是我的这是造成错误的类全码:

using System; 
 
using System.Collections.Generic; 
 
using System.Linq; 
 
using System.Text; 
 
using System.Threading.Tasks; 
 

 
namespace Forge 
 
{ 
 
    class Delete 
 
    { 
 
     private void DeleteOldFilesIfOverFolderLimit(string folderPath, 
 
               long folderSizeLimit, 
 
               long amountToDelete) 
 
     { 
 
      var folder = new DirectoryInfo(folderPath); 
 
      var files = folder.GetFiles(); 
 
      var folderSize = files.Sum(fi => fi.Length); 
 

 
      if (folderSize > folderSizeLimit) 
 
      { 
 
       // Sort the list of files with the oldest first. 
 
       Array.Sort(files, 
 
          (fi1, fi2) => fi1.CreationTime.CompareTo(fi2.CreationTime)); 
 

 
       var amountDeleted = 0L; 
 

 
       foreach (var file in files) 
 
       { 
 
        amountDeleted += file.Length; 
 
        file.Delete(); 
 

 
        if (amountDeleted >= amountToDelete) 
 
        { 
 
         break; 
 
        } 
 

 
       } 
 
      } 
 
     } 
 
    } 
 
}

我不知道是否需要插入任何信息。对于我的特定程序,尽管(即文件夹路径,大小限制等)这可能是问题。

无论如何,我知道我需要将这段代码添加到一个类中,所以我去了“Program> Add Class”来创建一个类。然后我添加了代码。但是,当我去筹建方案这两个错误弹出:

错误CS0246类型或命名空间名称“的DirectoryInfo”找不到(是否缺少using指令或程序集引用?)- 线15

错误CS1579 foreach语句无法对'?'类型的变量进行操作因为'?'不包含“的GetEnumerator” 一个公共定义 - 第27行

任何人可以帮助我,告诉我什么,我做错了吗?

(PS对不起,我超级新本全编码的事情。

+2

请显示[MCVE] *在*问题。我们不应该遵循链接来查看破损的代码。我的猜测是你没有'System.IO'的'using'指令。 –

+0

您在程序的顶部缺少'using System.IO;',它是包含'DirectoryInfo'的命名空间。对于第二个问题,向我展示引发错误的行,我不想读取整个项目。 – Equalsk

+0

第二个重要的DV'd文章 - 阅读[Ask]并参加[Tour]永远不会太晚,因为您对这个问题提出了新的要求 – Plutonix

回答

1

我想你可能具有修复,添加该程序集依赖于:

using System.IO 

但我想指出的是,使用匿名类型“var”会导致更多的问题。如果您知道该类型是什么,请申报。这不仅会让你的代码更加冗长,而且会绕过缺少依赖的问题(编辑器会告诉你而不是编译器)。

这里是你的代码重构:

DirectoryInfo folder = new DirectoryInfo(folderPath); 
FileInfo[] files = folder.GetFiles(); 
long folderSize = files.Sum(fi => fi.Length); 

if (folderSize > folderSizeLimit) 
{ 
    // Sort the list of files with the oldest first. 
    Array.Sort(files, 
       (fi1, fi2) => fi1.CreationTime.CompareTo(fi2.CreationTime)); 

    long amountDeleted = 0L; 

    foreach (FileInfo file in files) 
    { 
     amountDeleted += file.Length; 
     file.Delete(); 

     if (amountDeleted >= amountToDelete) 
     { 
      break; 
     } 

    } 
} 
+0

非常感谢!从长远来看,这真的会有所帮助。 :) 你可能知道在哪里插入缓存限制的数据吗? **这是我在另一个论坛上的原始问题:我想为我的c#程序设置一个高速缓存限制。我的程序定期创建文件并将其保存到文件夹中。我想它,所以如果该文件夹(C:\ SysApp)。达到这个极限(150000KB),它会自动开始删除先从最早的一次(149900KB)仅删除了一定量的文件** – ReiSixx9

+0

@ ReiSIxx9你应该在这个网站上创建另一个帖子。没有人会在评论中回答子问题:-) –

+0

感谢您的提示!我现在就去做。 :) – ReiSixx9

1

使用这对你的代码的顶部

using System.IO; 
+0

谢谢!这样既解决了错误,又成功地构建了它。 – ReiSixx9

+0

请标记为答案 – rashfmnb

+0

我是新手。我如何将其标记为答案? – ReiSixx9

相关问题