我最近开始收到错误,指出我的目录无法找到我已经尝试了很多方法来解决这个问题但尚未找到解决方案。
该方法应允许用户为其计算机选择图像,并将其添加到应用程序文件夹结构中名为images的文件夹中。问题是当使用File.copy(imageFilename,path)时;它会引发错误。我试过改变路径,你会从代码中看到它。当程序本身已经通过应用程序的文件路径并且仍然向我提出错误时,它甚至会这样做。
这是方法。
private void btnImageUpload_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog imageFile = new OpenFileDialog();
imageFile.InitialDirectory = @"C:\";
imageFile.Filter = "Image Files (*.jpg)|*.jpg|All Files(*.*)|*.*";
imageFile.FilterIndex = 1;
if (imageFile.ShowDialog() == true)
{
if(imageFile.CheckFileExists)
{
string path = AppDomain.CurrentDomain.BaseDirectory;
System.IO.File.Copy(imageFile.FileName, path);
}
}
}
我正在使用VS2013,并已包含使用Microsoft.win32
如有任何进一步的信息,请询问。
谢谢
答案 0 :(得分:1)
我不确定是否存在问题,但File.Copy
方法需要源文件名和目标文件名,而不是源文件名和目录:{{3} }
所以,为了使这项工作,在你的情况下,你必须做类似以下的事情(省略名称空间):
File.Copy(imageFile.FileName, Path.Combine(path, Path.GetFileName(imageFile.FileName));
请注意,如果目标文件存在,则会失败,要覆盖它,您需要在Copy
方法(true
)中添加额外参数。
编辑:
只需注意,OpenFileDialog.CheckFileExists
不会返回指示所选文件是否存在的值。相反,它是一个值,指示如果用户指定不存在的文件名,文件对话框是否显示警告。因此,在关闭对话框后不应检查此属性,而应在打开它之前将其设置为true
(https://msdn.microsoft.com/en-us/library/c6cfw35a(v=vs.110).aspx)
答案 1 :(得分:1)
有两件事需要考虑
private void btnImageUpload_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog imageFile = new OpenFileDialog();
imageFile.InitialDirectory = @"C:\";
imageFile.Filter = "Image Files (*.jpg)|*.jpg|All Files(*.*)|*.*";
imageFile.FilterIndex = 1;
if (imageFile.ShowDialog() == true)
{
if(imageFile.CheckFileExists)
{
string path = AppDomain.CurrentDomain.BaseDirectory; // You wont need it
System.IO.File.Copy(imageFile.FileName, path); // Copy Needs Source File Name and Destination File Name
}
}
}
string path = AppDomain.CurrentDomain.BaseDirectory;
您不需要这个,因为默认目录是运行程序的当前目录。
其次
System.IO.File.Copy(imageFile.FileName, path);
复制需要源文件名和目标文件名,因此您只需要提供文件名而不是路径
所以您的更新代码将是
private void btnImageUpload_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog imageFile = new OpenFileDialog();
imageFile.InitialDirectory = @"C:\";
imageFile.Filter = "Image Files (*.jpg)|*.jpg|All Files(*.*)|*.*";
imageFile.FilterIndex = 1;
if (imageFile.ShowDialog() == true)
{
if(imageFile.CheckFileExists)
{
System.IO.File.Copy(imageFile.FileName, SomeName + ".jpg"); // SomeName Must change everytime like ID or something
}
}
}