【问题标题】:How do I code paths that are stored in database?如何编码存储在数据库中的路径?
【发布时间】:2013-09-11 19:23:10
【问题描述】:

我正在学习编写一个程序来删除服务器上超过指定日期的日志文件。该程序将基于表而不是基于服务器。使用 UNC,日志文件目录的路径存储在数据库中。我正在学习 Directory.GetFiles() 方法,但我不确定路径的语法是什么。我认为它将是 workList 因为它存储路径。任何解决此问题的帮助将不胜感激。我的代码如下。

//create list to store database contents
static List<LogData> GetWorkList()
{
    List<LogData> logDatas = new List<LogData>();
    LogData logData = new LogData();


    //execute sql query
    //execute database reader
    string sqlQuery = "Select daysToKeep, fileLocation, active from dbo.FileDeletion where fileLocation='@fileLocation';";
    SqlCommand command = new SqlCommand(sqlQuery);
    SqlDataReader reader = command.ExecuteReader();

    while (reader.Read())
    {

        //make a logData, creating a new instance of a class
        logData = new LogData();

        //move stuff from reader into log data, and exp
        logData.DaysToKeep = Convert.ToInt32(reader["daysToKeep"]);
        logData.Active = Convert.ToBoolean(reader["active"]);
        logData.FileLocation = Convert.ToString(reader["fileLocation"]);


        //add logData to list
        logDatas.Add(logData);

    }

    return logDatas;
}

//Get active entries from table, call getWorkList
public static void WorkList(//Not sure of what path to use)
{   
    //get active entries

    List<LogData> workList = GetWorkList();

    foreach()
    {
        if(File.Exists()
        {

        }
    }

    //check to see if date created in directory is older that x number of days
    if(DateTime.Now.Subtract(dt).TotalDays <= 1)
    {
        log.Info("This directory is less than a day old");
    }
    //if file is older than x number of days
    else if (DateTime.Now.Subtract(dt).TotalDays <= //not sure of what variable or property to use)
    {
        File.Delete
    }
    //delete file
}

【问题讨论】:

  • 您能举例说明I'm not sure what the syntax would be the path 的含义吗? (你有c:\temp\blah.log 并且你想要c:\tempblah.log
  • 在数据库中名为“fileLocation”的列中列出了多个路径。我试图编写程序以将这些“多个”路径存储在列表中。该列表包含日志文件所在的所有路径的目录位置。因此,尝试使用硬编码的直接路径是行不通的,因为我希望它遍历列表并检查每个文件的 daysToKeep,如果文件早于 daysToKeep,则删除该文件。我希望这更清楚。我知道我想要什么,只是不知道如何到达那里
  • 我遇到的问题是,没有关于fileLocation 中存储的内容的示例,您也没有给出您想要fileLocation 值的哪一部分的示例。
  • \\gts101server\sharedFolder\Program Files\User\Services\Log Files\Logs 使用此路径,程序使用 UNC 转到列出的任何文件位置路径,无论它位于哪个服务器上。从而无需为每个服务器创建一个exe

标签: c# directory getfiles


【解决方案1】:

假设您的 fileLocation 不仅包含路径,还包含文件名,那么以下内容应该可以工作。

//Get active entries from table, call getWorkList
public static void WorkList(//Not sure of what path to use)
{   
//get active entries

List<LogData> workList = GetWorkList();

foreach(var work in workList)
{
    if(File.Exists(work.fileLocation))
    {
        File.Delete(work.fileLocation);
    }
}

//check to see if date created in directory is older that x number of days
if(DateTime.Now.Subtract(dt).TotalDays <= 1)
{
    log.Info("This directory is less than a day old");
}
//if file is older than x number of days
else if (DateTime.Now.Subtract(dt).TotalDays <= //not sure of what variable or property to use)
{
    File.Delete
}
//delete file

}

【讨论】:

  • 谢谢比尔,在这一点上,这让我朝着正确的方向前进
  • 不客气!如果您有更多示例或信息,我们可以更接近您的需求。 File 类和 Directory 类一样非常健壮。您也可以轻松地遍历目录中的文件以获取所需的内容。
【解决方案2】:

我正在学习 Directory.GetFiles() 方法,但我不确定路径的语法是什么。

Directory.GetFiles() 看起来很直接。

foreach (var myPath in pathsFromDatabase)
{
  string[] files = Directory.GetFiles(myPath)
  Console.WriteLine("Directory {0} contains {1} files.", myPath, files.Length);
}

将打印每个目录中的文件数。

【讨论】:

  • 感谢您的帮助。如果我可以对路径进行硬编码,那就太简单了。 workList 中有多个路径,因此硬编码将不起作用,因为那时我必须对每个路径进行硬编码,并且每个服务器有多个路径。
  • 在这种情况下,将硬编码值更改为非硬编码值需要 5 秒的时间...
  • 好的,这就是我发布此评论的原因。我正在学习如何做到这一点。仅仅说它是 5 秒的工作量并不能帮助学习如何去做。请举个例子
  • 恕我直言,我本可以将 myPath 放在任何地方。您的示例留下的问题多于提供的答案
  • 我在顶部引用了你的问题,这对我来说基本上意味着how do I use Directory.GetFiles()。首先,我为您提供了它如何工作的示例(以及指向 msdn 的链接)。然后我更新了我的答案,给出了一个非常简单的示例,说明如何通过表示路径的字符串列表/数组并使用每个路径运行该方法。如果我没有提供足够的信息来提供帮助,那是因为您的问题对于您实际需要帮助的内容非常模糊
猜你喜欢
  • 2023-03-13
  • 1970-01-01
  • 2013-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-01
  • 1970-01-01
相关资源
最近更新 更多