【发布时间】:2017-08-23 11:41:45
【问题描述】:
我使用的是 Windows 10,我有两个文件夹,即 Source 和 Destination。 Destination 文件夹位于 Dropbox 中。我有两种方法 CopySourceFilesToDestination 和 SynchronizeSourceAndDestination。第一种方法将所有文件夹和文件从源复制到目标,而第二种方法检查源文件夹中是否存在特定文件名,如果在源中找不到文件名,则从目标文件夹中删除特定文件。现在我有几个文件命名如下,我不需要关心文件中的内容。
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 时,它以不同的方式表示相同的文件名(我们从我的眼中看到的)。你能帮我解决这个问题吗?
【问题讨论】: