首页 > 解决方案 > 获取文件路径,如果文件名中包含 ID,则将文件移动到其他目录中

问题描述

基本上,我需要检查文件是否存在于 4 版本中,这意味着文件名中出现 11 位数字代码。检查完成后,我需要将文件移动到另一台服务器上。

我的问题是我获得了 ID,并且我知道 ID 何时出现 4 次,但我不知道如何从获得的 ID 中获取文件路径,然后移动文件。

任何形式的帮助将不胜感激。

static void Main(string[] args)
{

    string ExtractIDFromFileName(string filename)
    {
        return filename.Split('_').Last();
    }

    Dictionary<string, int> GetDictOfIDCounts()
    {
        List<string> allfiles = Directory.GetFiles("C:/Users/Desktop/Script/tiptop", "*.txt").Select(Path.GetFileNameWithoutExtension).ToList();
        allfiles.AddRange(Directory.GetFiles("C:/Users/Desktop/Script/tiptop", "*.top").Select(Path.GetFileNameWithoutExtension).ToList());
        Dictionary<string, int> dict = new Dictionary<string, int>();

        foreach (var x in allfiles)

        {

            string fileID = ExtractIDFromFileName(x);
            if (dict.ContainsKey(fileID))
            {
                dict[fileID]++;

            }
            else
            {
                dict.Add(fileID, 1);

            }
        }
        return dict;
    }

    var result = GetDictOfIDCounts();
    foreach (var item in result)
    {
        //Console.WriteLine("{0} > {1}", item.Key, item.Value);

        if (item.Value == 4)

        {
            //When we know that those ID appear 4 times, I need to grab back the FilePath and then move the files in an other DIR.
            Console.WriteLine("{0} > {1}", item.Key, item.Value);
        }

    }

    Console.ReadLine();
}

标签: c#

解决方案


您将要使用 File.Move:https ://docs.microsoft.com/en-us/dotnet/api/system.io.file.move?view=netframework-4.7.2

这很简单。将字典中的 ID 设为源文件的完整路径,然后 File.Move(dict.Key, some-variable-holding-the-new-directory-and-file-name);

由于您将要使用文件路径,因此只需切换到使用 Directory & File 的实例版本: DirectoryInfo & FileInfo:

代替

List<string> allfiles = Directory.GetFiles("C:/Users/Desktop/Script/tiptop", "*.txt").Select(Path.GetFileNameWithoutExtension).ToList();

DirectoryInfo di = new DirectoryInfo("C:/Users/Desktop/Script/tiptop");
            var allFiles = di.GetFiles("*.txt");

使 FileInfo 成为字典的键。然后你可以做类似的事情

dict.Key.FullName

推荐阅读