繁体   English   中英

Dropbox文件夹中复制的文件与原始文件名的处理方式有所不同

[英]Files Copied in the Dropbox folder are treating differently than the original file names

我正在使用Windows 10,并且有两个文件夹,即SourceDestination Destination文件夹在Dropbox内部。 我有两种方法CopySourceFilesToDestinationSynchronizeSourceAndDestination 第一种方法将所有文件夹和文件从源复制到目标,而第二种方法检查源文件夹中是否存在特定的文件名,如果未在源文件中找到文件名,则从目标文件夹中删除特定文件。 现在,我有几个命名如下的文件,并且不需要关心文件中的内容。

E:\\ Source \\ A0000000001 \\ 20162356312-历史中乌托邦的未来。 海登·怀特。 Historein 7.pdf

E:\\ Source \\ T0000000142 \\20162350775-ÉtienneGeoffroy Saint-Hilaire,1772-1844年,一位有远见的博物学家。 埃尔维·盖亚德(HervéLe Guyader).pdf

E:\\ Source \\ T0000000403 \\ 2016242657-独行者的尊敬; 植物著作; 和给弗朗索尔的信。 让·雅克·卢梭.pdf

E:\\ Source \\ T0000000428 \\ 2016243154-文学科学-不可估量的差异.HelmutMüller-Sievers.pdf

当我运行程序时,会将文件复制到目标位置,但是我的SynchronizeSourceAndDestination方法会删除所有文件,并且期望列表中的第一个文件不包含任何UTF-8字符。

using System;
using System.IO;

namespace DropboxDemo
{
    class Program
    {
        private static string lookupDirectory = @"E:\Source";
        private static string backupDirectory = @"C:\Users\SIMANT\Dropbox \Destination";
        static void Main(string[] args)
        {
            Console.WriteLine("Please wait while copying files.");
            CopySourceFilesToDestination(lookupDirectory);

            Console.WriteLine("Please wait while synchronizing files.");
            SynchronizeSourceAndDestination(backupDirectory);

            Console.ReadLine();
        }

        public static void SynchronizeSourceAndDestination(string dir)
        {
            foreach (string file in Directory.GetFiles(dir))
            {
                string destFilePath = file.Replace(backupDirectory, lookupDirectory);

                if (!File.Exists(destFilePath))
                {
                    // Delete file from Backup
                    File.Delete(file);
                }
            }

            foreach (string directory in Directory.GetDirectories(dir))
            {
                string destinationDirectory = directory.Replace(backupDirectory, lookupDirectory);

                if (!Directory.Exists(destinationDirectory))
                {
                    Directory.Delete(directory, true);
                    continue;
                }
                SynchronizeSourceAndDestination(directory);
            }
        }
        public static void CopySourceFilesToDestination(string dir)
        {
            foreach (string file in Directory.GetFiles(dir))
            {
                string destFilePath = file.Replace(lookupDirectory, backupDirectory);

                if (!File.Exists(destFilePath))
                {
                    File.Copy(file, destFilePath);
                }
                else
                {
                    // Override the existing file                        
                    File.Copy(file, destFilePath, true);
                }
            }

            foreach (string directory in Directory.GetDirectories(dir))
            {
                //Create directory if not present in the destination
                string destinationDirectory = directory.Replace(lookupDirectory, backupDirectory);
                if (!Directory.Exists(destinationDirectory))
                {
                    Directory.CreateDirectory(destinationDirectory);
                }
                CopySourceFilesToDestination(directory);
            }
        }
    }
}

第二次,我只是将所有文件从Destination(位于Dropbox内)复制到Source文件夹中,然后重新运行该程序,现在它不会删除文件。 为什么我会得到这种行为? 我认为,将文件复制到Dropbox时,它以不同的方式表示相同的文件名(我们从我的眼中看到的)。 您能帮我解决这个问题吗?

为了使我的解决方案可行,我通过按É (Alt + 144) ,é (Alt + 130)更改了扩展ASCII字符。 我认为这是因为文件创建者直接进行了一些字符复制和粘贴。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM