在C#自动备份脚本中重复输出

时间:2019-01-07 23:23:40

标签: c# repeat

我已经从多个在线资源创建了一个自动备份脚本,并且我对C#的了解有限,并且由于某种原因,它正在重复第一个Write Line?有人可以帮我吗,我敢肯定这是一个愚蠢的错误,但是我不知道有人擅长C#。这是代码:

是堆栈溢出和vb / c#的新功能,如果有任何愚蠢的错误,我们将深表歉意。

我也确实有尝试和捕捉,但是我删除了它们,希望它们是导致问题的原因,但不是。

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

class Program
{
    static void Main(string[] args)
    {
        string date = DateTime.Now.ToString("ddMMyy");
        string Source = @"G:\Personal\A1";
        string Destination = @"D:\_Lil USB Backup\" + date;
        if (System.IO.Directory.Exists(Source))
        {
            if (!System.IO.Directory.Exists(Destination))
            {
                System.IO.Directory.CreateDirectory(Destination);
            }
            CopyAllFiles(Source, Destination);
            Console.WriteLine("Task Completed successfully.");
            Thread.Sleep(5000);
        }
        else
        {
            Console.WriteLine("Source does not exist, try plugging the USB in dips**t.");
            Thread.Sleep(5000);
        }
    }

    private static void CopyAllFiles(string Source, string Destination)
    {
        // Get the subdirectories for the specified directory.
        DirectoryInfo dir = new DirectoryInfo(Source);
        DirectoryInfo[] dirs = dir.GetDirectories();
        // Get the files in the directory and copy them to the new location.
        FileInfo[] files = dir.GetFiles();
        foreach (FileInfo file in files)
        {
            string temppath = Path.Combine(Destination, file.Name);
            file.CopyTo(temppath, true);
        }
        foreach (DirectoryInfo subdir in dirs)
        {
            string temppath = Path.Combine(Destination, subdir.Name);
            CopyAllFiles(subdir.FullName, temppath);
        }
        Console.WriteLine("Successfully copied files.");
    }
}

输出到控制台: 成功复制文件。 成功复制文件。 成功复制文件。 任务成功完成。

预期输出到控制台: 成功复制文件。 任务成功完成。

(尽管文件已正确复制)。

1 个答案:

答案 0 :(得分:0)

CopyAllFiles()递归调用CopyAllFiles(),并且每次调用都会调用WriteLine()语句。因此,您看到的输出与代码和我的期望相符。

我看到的最简单的解决方案是移动

Console.WriteLine("Successfully copied files.");

退出CopyAllFiles(),进入Main()函数。