0

私はこれに数日間苦労していて、それを理解することができません。

ディレクトリ内で最後に作成されたサブディレクトリからファイルをコピーする必要があります。サブディレクトリには、ファイルに到達する前にナビゲートするためのサブディレクトリもいくつかあります。そこで問題が発生します。

これを明確にしたいと思います。事前に助けてくれてありがとう、以下のディレクトリの例を示します。

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);
                    }
                }
            }
4

1 に答える 1

0

ディレクトリがどこかに保存されているため、ディレクトリがわかっていると仮定しLongTermます(fe Application-Settings):

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.EnumerateDirectorieswithSearchOption.AllDirectoriesは、すべてのディレクトリを再帰的に列挙します。Enumerable.OrderByDescendingディレクトリ名の番号を使用すると、それらは数値順に並べられ、最初に最大になります(つまり、49の前に50、99の前に100)。

于 2012-12-12T10:59:38.500 に答える