我在哪里将此数据插入到我的代码中?

时间:2016-12-15 19:05:44

标签: c# visual-studio

我想为我的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。

2 个答案:

答案 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)

单击项目选项并选择设置:

pic

输入默认值

pic

并且您的程序可以使用以下代码读取这些值(来自.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>