我有这个代码:
public void OnCreated(object sender, FileSystemEventArgs file)
{
Console.WriteLine("created called");
string[] files = Directory.GetFiles($"{textBox2.Text}", file.Name);
if (files.Length > 0)
{
if (trueFalse == "true")
{
if (!File.Exists(Path.Combine($"C:\\Users\\{Environment.UserName}\\OneDrive", file.Name)))
{
File.Copy(files[0], Path.Combine($"C:\\Users\\{Environment.UserName}\\OneDrive", file.Name));
}
else
{
Console.WriteLine("File already exists");
}
}
if (!File.Exists(Path.Combine(textBox3.Text, file.Name)))
{
File.Move(files[0], Path.Combine(textBox3.Text, file.Name));
}
else
{
Console.WriteLine("File already exists");
}
}
else
{
Console.WriteLine($"File {file.Name} not found in directory {textBox2.Text}.");
}
}
当我在
.txt
和 .doc
和 .docx
文件上测试它时,它可以工作并移动和复制,但是 .png
和 .jpg
不这样做,然后转到 else{} 块。
我不知道是什么导致了这种行为。有帮助吗?
自从 目录.GetFiles() 方法返回与搜索模式匹配的文件名数组,这是可能的 目录.GetFiles() 没有正确匹配图像文件。您可以尝试更改搜索模式以包括所有图像格式,例如:
string[] files = Directory.GetFiles($"{textBox2.Text}", "*.*", SearchOption.AllDirectories).Where(f => f.EndsWith(".png") || f.EndsWith(".jpg") || etc..).ToArray();
这将获取目录中的所有文件并将结果过滤为具有指定扩展名的文件。
或者,您也可以在对文件执行任何操作之前检查文件是否存在:
string sourceFilePath = Path.Combine($"{textBox2.Text}", file.Name);
string destinationFilePath = Path.Combine(textBox3.Text, file.Name);
if (File.Exists(sourceFilePath))
{
if (files.Length > 0)
{
if (trueFalse == "true")
{
if (!File.Exists(Path.Combine(pathstring), file.Name)))
{
File.Copy(sourceFilePath, Path.Combine(pathstring), file.Name));
}
else
{
Console.WriteLine("File already exists");
}
}
if (!File.Exists(destinationFilePath))
{
File.Move(sourceFilePath, destinationFilePath);
}
else
{
Console.WriteLine("File already exists");
}
}
else
{
Console.WriteLine($"File {file.Name} not found in directory {textBox2.Text}.");
}
}
else
{
Console.WriteLine($"File {file.Name} not found in directory {textBox2.Text}.");
}
这将在尝试移动或复制文件之前首先检查源目录中是否存在该文件,如果找不到该文件,将打印一条错误消息。