我在Visual Studio Community 2015中的c#程序的最后一部分,但我遇到了一个问题。
我正在使用此代码设置缓存限制:
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对不起,我是 super 这个整个编码的新东西。
答案 0 :(得分:1)
在代码顶部使用此功能
using System.IO;
答案 1 :(得分: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;
}
}
}