复制文件和文件夹检查是否存在

问题描述 投票:-1回答:1

(C#的新手)

我有一个已构建的应用程序,可以将文件和文件夹从一个位置复制到另一个位置。我最初遇到文件夹问题。由于某种原因,它将尝试在不创建目录的情况下复制文件。我通过添加第二部分来检查文件夹是否存在以及是否创建该文件夹,从而解决了该问题。我确信有更好的方法来解决此问题,但这是行得通的,所以我同意了。最终目标是这样。

  1. 检查文件/文件夹是否在目标位置中,并且早于源文件/文件夹
  2. 如果文件/文件夹不存在,请将其复制过来。如果文件/文件夹早于源文件,则将其复制。
  3. 如果文件夹位于目标位置而不是源文件夹中(表明已删除,则将文件从目标位置移动到存档文件夹中)>
  4. 下面是我到目前为止所拥有的,除了上面#3中描述的内容,它可以执行所有操作。关于如何将功能3中的功能添加到功能中,或简化文件副本并创建文件夹(如果不存在)的任何想法,将不胜感激。

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

namespace FileCopy
{
    class Program
    {
        public static string dtnow = DateTime.Now.ToString("mmdd_hhmm");
        public static string watch_path = string.Empty;
        public static string copy_path = string.Empty;
        public static string final_copy_path = string.Empty;
        public static string log_folder = @"C:\copylogs";
        //public static string log_file = "copy_log";
        public static string log_file = Path.Combine(log_folder + "\\copy_log" + dtnow + ".txt");
        public static int newer_count = 0;
        public static int skip_count = 0;
        public static int copy_count = 0;
        public static int totalcount = 0;
        public static int currentcount = 0;

        static void Main(string[] args)
        {
            if (args == null || args.Length < 2)
            {
                Console.WriteLine("Invalid Syntax");
                return;
            }
            else
            {
                watch_path = args[0];
                copy_path = args[1];
                log_start_Check(log_folder,log_file);
                CopyFolder(watch_path, copy_path);
                finalcount_statement();
            }

        }

// Log Folder check and creation
        public static void log_start_Check(string log_folder, string log_file)
        {
            Console.Write("Checking Log Folder: ");
            if (!Directory.Exists(log_folder))
            {
                try
                {
                    Directory.CreateDirectory(log_folder);
                    Console.WriteLine("Created!");
                }
                catch (Exception error)
                {
                    Console.WriteLine("Unable to Create Directory" + error);
                    return;
                }
            }
            else
            {
                Console.WriteLine("Exists");
            }
            Console.Write("Checking Log File: ");
            //Console.WriteLine(log_file);
            if (!File.Exists(log_file))
            {
                try
                {
                    File.Create(log_file);
                    Console.WriteLine("Created!");
                }
                catch (Exception error)
                {
                    Console.WriteLine("Unable to Create file" + error);
                    return;
                }
            }
            else
            {
                Console.WriteLine("Exists");
            }
            Console.WriteLine();
        }

// Copy Folder Functions
        static public void CopyFolder(string sourceFolder, string destFolder)
        {
            try
            {
                if (!Directory.Exists(destFolder))
                    Directory.CreateDirectory(destFolder);
                totalcount = Directory.GetFiles(sourceFolder, "*.*", SearchOption.AllDirectories).Count();
                string[] files = Directory.GetFiles(sourceFolder);
                totalcount = files.Length;
                foreach (string file in files)
                {
                    string name = Path.GetFileName(file);
                    FileInfo source_info = new FileInfo(file);
                    string dest = Path.Combine(destFolder, name);
                    FileInfo dest_info = new FileInfo(dest);
                    if (File.Exists(dest))
                    {
                        try
                        {
                            if (source_info.LastWriteTime > dest_info.LastWriteTime)
                            {
                                //Console.Write("\r" + currentcount + " of " + totalcount + " Completed     ");
                                Console.ResetColor();
                                Console.ForegroundColor = ConsoleColor.Yellow;
                                File.Copy(file, dest, true);
                                Console.Write("\rFile Newer, File Copied " + dest + "                         ");
                                Console.ResetColor();
                                newer_count++;
                            }
                            else
                            {
                                //Console.Write("\r" + currentcount + " of " + totalcount + " Completed     ");
                                Console.ResetColor();
                                Console.ForegroundColor = ConsoleColor.Red;
                                Console.Write("\r** - File Exists " + dest + "                         ");
                                Console.ResetColor();
                                skip_count++;
                            }                          
                        }
                        catch (Exception error)
                        {
                            error_handling("Error in Application " + error.Message, dest, file);
                        }
                    }
                    else
                    {
                        try
                        {
                            //Console.Write("\r"+currentcount + " of " + totalcount + " Completed     ");
                            Console.ResetColor();
                            Console.ForegroundColor = ConsoleColor.Green;
                            File.Copy(file, dest, false);
                            Console.Write("\rFile Copied " + dest + "                         ");
                            Console.ResetColor();
                            copy_count++;
                        }
                        catch (Exception error)
                        {
                            error_handling("Error in Application " + error.Message, dest, file);
                        }
                    }
                    currentcount++;
                }
                string[] folders = Directory.GetDirectories(sourceFolder);
                foreach (string folder in folders)
                {
                    string name = Path.GetFileName(folder);
                    string dest = Path.Combine(destFolder, name);
                    CopyFolder(folder, dest);
                }
            }
            catch (Exception error)
            {
                error_handling("Error in Application " + error.Message, null, null);
            }
        }
// Error Handling to add messages to logs
        public static void error_handling(string message, string fileident, string source)
        {
            using (System.IO.StreamWriter myFile = new System.IO.StreamWriter(log_file, true))
            {
                string finalMessage = string.Format("{0}: {1} SOURCE: {3} - DEST: {2}", DateTime.Now, message, fileident, source, Environment.NewLine);
                myFile.WriteLine(finalMessage);
                myFile.Close();
            }
        }
        // Final Statement
        public static void finalcount_statement()
        {
            Console.WriteLine("");
            Console.WriteLine("--------------------------------------------------------------------------------------------");
            Console.WriteLine("Total New Files Copied: " + copy_count);
            Console.WriteLine("Total Newer Files Updated: " + newer_count);
            Console.WriteLine("Total Files Skipped: " + skip_count);
            Console.WriteLine("--------------------------------------------------------------------------------------------");
            Console.WriteLine("");
            Console.WriteLine("");
        }
    }
}

((C#的新手)我已经构建了一个应用程序,可以将文件和文件夹从一个位置复制到另一个位置。我最初遇到文件夹问题。由于某些原因,它将尝试复制文件...

c# file-copying
1个回答
0
投票

您可以用相同的方法来做,也许是这样:

© www.soinside.com 2019 - 2024. All rights reserved.