好的,我有一个按钮(button1),我想将静态目录复制到所选目录。基本上我有textbox1,其中添加了与不同目录相关的不同数值。我有一个字典,将字符串设置为映射,链接到textbox2到源文件夹路径的代码。 。这决定了我们从哪里复制数据。我想通过folderBrowserDialog1.ShowDialog()将这些数据复制到textbox2中选择的文件夹中;命令。如何创建字典,我把它放在textbox1的哪里,然后如何让按钮取出textbox1中的任何内容并将整个目录复制到textbox2?
private Dictionary<string, string> mapping = new Dictionary<string, string>
{
{ "111", @"C:\Program Files\Example" },
{ "112", @"C:\Program Files\Example2" },
{ "113", @"C:\Program Files\Example3" },
};
public static string[] GetFiles(string mapping);
public static void Copy(string sourceFileName, string destFileName);
private void button2_Click(object sender, EventArgs e)
{
string destination = textBox1.Text;
foreach (var f in Directory.GetFiles(mapping))
{
File.Copy(Path.Combine(mapping, f)); destination;
}
}
答案 0 :(得分:0)
以下是“如何复制整个文件目录”的回答:
使用Directory.GetFiles()
(请参阅documentation)获取目录中所有文件的列表。
然后使用File.Copy()
(请参阅documenation)复制单个文件:
foreach(var f in Directory.GetFiles(srcPath))
{
File.Copy(Path.Combine(srcPath, f), dstPath);
}
<小时/>
修改强>
Directory.GetFiles()
需要一条路径:
private void button2_Click(object sender, EventArgs e)
{
string destination = textBox1.Text;
string srcdir = mapping["111"];
foreach(var f in Directory.GetFiles(srcdir))
{
string srcpath = Path.Combine(srcdir, f)
File.Copy(srcpath, destination);
}
}
答案 1 :(得分:0)
我不是100%确定我理解你的问题的细节,因为TextBox1和TextBox2的使用似乎不一致,但这是我读到的:
如果这是正确的,你就近了。有些事情需要注意:
我不确定你为什么要这两行。它们看起来像方法定义,但没有实现。我认为你可以删除它们并使用等效的System.IO
调用:
public static string[] GetFiles(string mapping);
public static void Copy(string sourceFileName, string destFileName);
Directory.GetFiles(mapping)
无法使用,因为mapping
是Dictionary<string, string>
,而不是string
。您需要根据TextBox1
中的密钥(数字代码)选择相应的值(路径),并在Directory.GetFiles()
方法中使用该值。
File.Copy(Path.Combine(mapping, f)); destination;
是一种不正确的语法,不会编译(应该是File.Copy(Path.Combine(mapping, f), destination);
。此外,您不需要将第一个参数的源路径和文件名组合为{ {1}}返回路径以及文件名(包括扩展名)。但是,您需要单独获取文件名并将其与目标文件的源路径相结合。您可以使用Path.GetFileName执行此操作。
尝试下面的代码 - 它解决了上面提到的问题,假设GetFiles
是映射的来源,textBox1
是对话窗口中的目标:
textBox2
以上代码执行以下操作:
private void button2_Click(object sender, EventArgs e)
{
string source = textBox1.Text
string destination = textBox2.Text;
if (mappings.ContainsKey(source))
{
foreach (var f in Directory.GetFiles(source))
{
File.Copy(f, Path.Combine(destination, Path.GetFileName(f)));
}
}
else
{
// No key was found, how you handle it will be dictated by the needs of the application and/or users.
}
}
的密钥。textBox1
(文件)用作第一个参数的源文件(因为它包含路径,因为f
返回路径和文件名),目标目录是与文件名结合(通过调用Directory.GetFiles()
检索)。如果在Path.GetFileName
方法中单独使用f
,则最终会使用Path.Combine()
。同样,上述代码基于我对您的问题的理解。如果我的理解不正确,我概述的原则仍然可以帮助您解决问题。
**编辑**
根据以下评论,您只需翻转sourcePath\originalPath\filename
和source
的作业即可。 destination
将包含与textBox2
目录中的密钥对应的代码,该代码将为您提供源目录的路径。 mappings
将包含目标路径。像这样:
textBox1
其余代码保持不变。