我想为我的C#程序设置缓存限制。我的程序定期创建文件并将它们保存到文件夹中。我想要它,所以如果文件夹(C:\ SysApp)达到此限制(150000KB),它将自动开始删除文件,从最旧的文件一次只删除一定数量(149900KB)。
到目前为止,我有这段代码:
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;
}
}
}
}
我只想弄清楚我需要在哪里插入我的程序的特定数据(在括号的第一段中给出)。
我正在使用Visual Studio Community 2015。
答案 0 :(得分:1)
删除文件是粗略的,如果您不小心传入格式错误的字符串或只是错误的字符串,那么您将丢失数据,例如意外删除您的博士论文的唯一副本或破坏您的操作系统。所以,我将向您展示如何调用方法,而不是向您展示如何使用您给出的代码:
从Hello World!示例开始:
public class Hello1
{
public static void Main()
{
System.Console.WriteLine("Hello, World!");
// This is here only to pause the console window so it stays open.
System.Console.ReadLine();
}
}
现在让我们实现自己的方法将任何字符串打印到控制台:
public class Hello1
{
public static void Main()
{
PrintToConsole("Hello World!");
// This is here only to pause the console window so it stays open.
System.Console.ReadLine();
}
private static void PrintToConsole(string stringToPrintToConsole)
{
System.Console.WriteLine(stringToPrintToConsole);
}
}
最后,让我们传入另一个参数来控制该行的打印次数:
public class Hello1
{
public static void Main()
{
PrintToConsole("Hello World!", 5);
// This is here only to pause the console window so it stays open.
System.Console.ReadLine();
}
private static void PrintToConsole(string stringToPrintToConsole, long numberOfTimesToPrint)
{
for (int i = 0; i < numberOfTimesToPrint; i++)
{
System.Console.WriteLine(stringToPrintToConsole);
}
}
}
您获得了一个方法但没有在哪里调用该方法。注意在我的程序中我必须在某个地方调用PrintToConsole()
,这是一个控制台应用程序,整个程序在Main()
开始并完成,这就是我放置代码的地方。从技术上讲,您可以将方法的主体直接粘贴到Main中,然后在您看到变量folderPath
的使用的任何地方,将其替换为实际的字符串"C:\\SysApp"
,并将其替换为其他2个参数,该计划也将如此运作。
答案 1 :(得分:1)
单击项目选项并选择设置:
输入默认值
并且您的程序可以使用以下代码读取这些值(来自.settings文件或默认值)
static void Main(string[] args)
{
string folder=Properties.Settings.Default.folder;
long limit=Properties.Settings.Default.sizeLimit;
long delete=Properties.Settings.Default.toDelete;
}
如果更改程序中的设置值,则需要在退出应用程序之前保存新值。这是通过Properties.Settings.Default.Save();
完成的。此命令使用您的值创建.config
文件。程序启动时会自动读取它们。
内容为XML
文件,设置值清晰可见。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="SO_KeepStettings.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<userSettings>
<SO_KeepStettings.Properties.Settings>
<setting name="folder" serializeAs="String">
<value>C:\SysApp</value>
</setting>
<setting name="sizeLimit" serializeAs="String">
<value>157286400</value>
</setting>
<setting name="toDelete" serializeAs="String">
<value>156237824</value>
</setting>
</SO_KeepStettings.Properties.Settings>
</userSettings>
</configuration>