我正在寻找一种使用C#将文件从一个目录移动到另一个目录的方法。我有一个表单应用程序,我希望用户使用文件选择器选择一个文件,并在单击“设置背景”按钮时将文件传输到应用程序中指定的位置。
在尝试@VulgarBinary提供的答案后,我得到以下异常:
System.IO.IOException: Cannot create a file when that file already exists.
答案 0 :(得分:5)
您需要确保您的程序具有编写文件的适当权限,但是:
if (File.Exists(sourcePath))
{
File.Move(sourcePath, destinationPath);
}
这应该可以帮助你做你想做的事。
示例:
var sourcePath = "C:\Users\someuser\Pictures\VulgarBinary.jpg";
var destinationPath = "C:\Whatever\Path\You\Want\VulgarBinary.jpg";
编辑1
鉴于您在此答案下面的评论,您遇到的问题是您正在创建的文件已存在。如果您想要替换它,您可以这么做:
if (File.Exists(sourcePath))
{
if(File.Exists(destinationPath))
File.Delete(destinationPath);
File.Move(sourcePath, destinationPath);
}
如果你不在乎输出文件的名称是什么,只是总是想写它,你可以这样做:
var outputDirectory = "C:\\Whatever\\Path\\You\\Want\\";
if (File.Exists(sourcePath))
{
File.Move(sourcePath, outputDirectory + Guid.NewGuid().ToString() + ".jpg");
}
后者将始终复制文件(所有人都使用不同的名称)。第一个解决方案将用新文件替换任何具有相同名称的文件。
干杯!
答案 1 :(得分:2)
这是一个代码示例和脚手架,我使用@ VulgarBinary的提议。
private string sourcePath;
private string destinationPath;
public Form1()
{
destinationPath = @"c:\users\name\desktop\"; // f.e.
InitializeComponent();
}
//Browse Button
private void button1_Click(object sender, EventArgs e)
{
using (OpenFileDialog dlg = new OpenFileDialog())
{
dlg.Title = "Open Image";
dlg.Filter = "bmp files (*.bmp)|*.bmp"; // you can filter whatever format you want
if (dlg.ShowDialog() == DialogResult.OK)
{
sourcePath = dlg.FileName;
}
}
}
//Set Background Button
private void button2_Click(object sender, EventArgs e)
{
if (!string.IsNullOrWhiteSpace(sourcePath) && File.Exists(sourcePath))
{
destinationPath += Path.GetFileName(sourcePath);
File.Move(sourcePath, destinationPath);
}
}