我的控制台应用程序 (C#) 对于不包含任何 UTF-8 字符的文件名完美地工作,但是当文件名包含任何 UTF-8 字符时,我的条件 if(!File.Exists(destFilePath)) 没有按预期工作.
我需要删除那些只存在于目标中而不存在于源中的文件。例如,当我的文件名中有一些特殊字符时,
文件
C: \ A00000001 \ 20162350775-Étienne Geoffroy Saint-Hilaire,1772-1844 年,一位有远见的博物学家。Hervé Le Guyader.pdf
目标文件路径
D:\ A00000001 \ 20162350775-Étienne Geoffroy Saint-Hilaire,1772-1844 年,一位有远见的博物学家。Hervé Le Guyader.pdf
不应删除上述情况中的文件名,因为源和目标具有相同的文件名,但确实如此。但是对于普通的文件名,没有问题。我的代码示例如下:
public 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);
}
}
注意:asp.net web 应用在 web 中有设置 globalculture="en-US" uiCulture="en-US" requestEncoding="UTF-8" responseEncoding="UTF-8" fileEncoding="UTF-8" .config 文件。上面的代码是 C# 控制台应用程序来处理 web 应用程序保存的文件。我的本地机器中的文件名没有问题,但是当代码在服务器中时,它不起作用。
为了使我的解决方案可行,我通过按 É (Alt + 144)、 é (Alt + 130)更改了扩展 ASCII 字符。我认为这是因为文件创建者直接对字符进行了一些复制和粘贴。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句