我想浏览目录,选择一个文件夹,然后将现有文件夹的内容复制到这个新目录。
我正在使用此代码,但它无效 我要复制它的文件夹是:C:\ Project
DialogResult result = fd.ShowDialog();
if (result == System.Windows.Forms.DialogResult.OK)
{
MessageBox.Show(fd.SelectedPath.ToString());
}
var _SelectedPath = fd.SelectedPath.ToString();
string sourceFile = @"C:\Project";
string destinationFile = _SelectedPath;
string fileName;
//System.IO.Directory.Move(sourceFile, @"_SelectedPath");
if (!System.IO.Directory.Exists(@"_SelectedPath"))
{
System.IO.Directory.CreateDirectory(@"_SelectedPath");
}
if (System.IO.Directory.Exists(sourceFile))
{
string[] files = System.IO.Directory.GetFiles(sourceFile);
// Copy the files and overwrite destination files if they already exist.
foreach (string s in files)
{
// Use static Path methods to extract only the file name from the path.
fileName = System.IO.Path.GetFileName(s);
_SelectedPath = System.IO.Path.Combine(@"_SelectedPath", fileName);
System.IO.File.Copy(s, @"_SelectedPath", true);
}
}
答案 0 :(得分:2)
您可以通过添加对Microsoft.VisualBasic
的引用来简化事情,因为它在单个函数中处理目录副本,我还可以在需要时显示Windows文件复制进度对话框。
示例:
DialogResult result = fd.ShowDialog();
if (result == System.Windows.Forms.DialogResult.OK)
{
MessageBox.Show(fd.SelectedPath.ToString());
}
string _SelectedPath = fd.SelectedPath.ToString();
string destinationPath = @"C:\Project";
Microsoft.VisualBasic.FileIO.FileSystem.CopyDirectory(_SelectedPath, destinationPath);
答案 1 :(得分:0)
使用以下代码替换for循环
// Copy the files and overwrite destination files if they already exist.
foreach (string s in files)
{
// Use static Path methods to extract only the file name from the path.
fileName = System.IO.Path.GetFileName(s);
string _currFileName = System.IO.Path.Combine(_SelectedPath, fileName);
System.IO.File.Copy(s, _currFileName, true);
}
在您的代码中,每次都会将文件名附加到相同的_SelectedPath。考虑您的源目录(C:\ Test)中是否有fileone.txt和filetwo.txt。当您第一次进入循环时,Filename将是 C:\ Test \ fileone.txt 。在下一次迭代中,文件名将是 C:\ Test \ fileone.txt \ filetwo.txt ,这会出现错误 - 找不到文件。上面的代码修复了问题