【问题标题】:Files Copied in the Dropbox folder are treating differently than the original file namesDropbox 文件夹中复制的文件的处理方式与原始文件名不同
【发布时间】:2017-08-23 11:41:45
【问题描述】:

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

E:\Source\A0000000001\20162356312-历史上乌托邦的未来。海登 白色的。历史记录 7.pdf

E:\Source\T0000000142\20162350775-Étienne Geoffroy Saint-Hilaire, 1772-1844 是一位有远见的博物学家。 Hervé Le Guyader.pdf

E:\Source\T0000000403\2016242657-独行者的遐想; 植物著作;和给弗朗基埃的信。让·雅克 卢梭.pdf

E:\Source\T0000000428\2016243154-文学科学-关于一个 无法估量的差异。Helmut Mü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 时,它以不同的方式表示相同的文件名(我们从我的眼中看到的)。你能帮我解决这个问题吗?

【问题讨论】:

    标签: c# dropbox


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多