从c#中的最新子目录复制文件

时间:2012-12-12 10:49:50

标签: c#

我几天来一直在努力解决这个问题,无法弄明白。

我需要从目录中最后创建的子目录中复制文件,子目录也有一些子目录,以便在我到达文件之前进行导航,这就是问题所在。

我希望我明白这一点,我将举例说明以下目录,提前感谢您的帮助。

C:\ProgramFiles\BuildOutput\mmh\LongTerm\**49**\release\MarketMessageHandler\Service\

以粗体突出显示的数字是我需要找到最新的子目录,而在services文件夹中我需要从中复制文件......

这是我试过的代码

string sourceDir = @“\ sttbedbsd001 \ BuildOutput \ mmh \ LongTerm \ 51 \ release \ MarketMessageHandler \ Service”;                 string target = @“C:\ Users \ gwessels \ Desktop \ test \”;

            string[] sDirFiles = Directory.GetFiles(sourceDir, "*", SearchOption.TopDirectoryOnly);

            string targetDir;

            if (sDirFiles.Length > 0)
            {
                foreach (string file in sDirFiles)
                {
                    string[] splitFile = file.Split('\\');
                    string copyFile = Path.GetFileName(file);
                    string source = sourceDir + "\\" + copyFile;

                    targetDir = target + copyFile;

                    try
                    {
                        if (File.Exists(targetDir))
                        {
                            File.Delete(targetDir);
                            File.Copy(source, targetDir);
                        }

                        else
                        {
                            File.Copy(source, targetDir);
                        }
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e);
                    }
                }
            }

1 个答案:

答案 0 :(得分:0)

假设LongTerm目录已知,因为它存储在某处(例如,应用程序设置):

string longTermDirectory = Properties.Settings.Default.LongTermDirectory;
DirectoryInfo dir = new DirectoryInfo(longTermDirectory);
dir.Create(); // does nothing if it already exists
int Number = int.MinValue;
DirectoryInfo latestFolder = dir.EnumerateDirectories("*.*", SearchOption.AllDirectories)
    .Where(d => int.TryParse(d.Name, out Number))
    .Select(Directory => new { Directory, Number })
    .OrderByDescending(x => x.Number)
    .Select(x => x.Directory)
    .First();
带有Directory.EnumerateDirectories

SearchOption.AllDirectories以递归方式枚举所有目录。带有目录名号码的Enumerable.OrderByDescending将以数字顺序排列,并且最高位(在49之前为50,在99之前为100)。