从文本框中将文件从一个文件夹复制到另一个指定文件名的文件夹



我正在尝试创建一个具有此特定功能的文件复制按钮:

当我在文本框中写入例如"KL5050"然后按下复制按钮,我想从一个特定的文件夹复制文件KL5050,并将其粘贴到另一个特定的文件夹,而不需要询问或打开任何对话框或窗口,只需点击,复制和粘贴。

文件格式无关紧要,可以是TXT, doc, PDF, JPEG等,只要它与文本框中的文本匹配到文件夹中的任何现有文件,它将被复制到另一个文件夹。

另外,如果复制文件夹中不存在该文件,则会得到一个警告"未找到文件"。

到目前为止,我有两个文本框的代码,第一个被称为serieBox,一个只需要输入数据(如果是空打开一个窗口),然后下一个框被命名为recetaBox,这是一个我键入文件的名称,然后单击按钮,程序将查找文件并将其复制到不同的文件夹。到目前为止,我不知道把第二个盒子放在哪里,recetaBox。

private void cargarButton_Click(object sender, EventArgs e)
{
if (serieBox.Text == string.Empty)
{
SerieWin openForm = new SerieWin();
openForm.ShowDialog();
}
else
{
try
{
string dircopyFrom = @"C:From";
string dircopyTo = @"C:To";
string[] files = Directory.GetFiles(dircopyFrom);
foreach (string file1 in files)
{
string filename1 = Path.GetFileName(file1);
File.Copy(file1, dircopyTo + "\", true);
}
}
catch (Exception ex)
{
}

您唯一没有完全清楚的是KL5050是文件名的开始,结束,全部还是一部分,但很容易修复

string[] files = Directory.GetFiles(dircopyFrom);
foreach (string file in files)
{
var fn = Path.GetFileNameWithoutExtension(file);

if(!fn.Contains(recetaTextBox.Text, StringComparison.OrdinalIgnoreCase))
continue;
fn = Path.GetFileName(file);
File.Copy(file, Path.Combine(dircopyTo, fn), true);
}
} catch(Exception ex){
MessageBox.Show(ex.Message);
}

扣分:

  • 做一些检查,如Contains, StartsWith, EndsWith等

  • 使用路径。结合来建造路径;.net不仅可以在Windows上运行,而且不同的系统有不同的目录分隔符

  • 文件。Copy的目标路径也必须包含一个FileName,而不仅仅是一个目录。在复制过程中,可以通过调整名称

    来重命名目标文件。
  • 永远不要放空catch块。至少总是做一个MessageBox.Show(ex.Message);,特别是在处理文件时。当点击按钮时,程序什么也不做是非常令人沮丧的。如果你至少得到一个文件正在被另一个程序使用当你试图复制的时候,你可以做一些事情。但是,如果你吞下这个异常,把它扔掉,而不是让它浮出水面,那么你将很难追踪到任何问题

  • 如果你想稍微提高效率,你可以使用recetaTextBox.Text的内容来形成GetFiles的过滤器,例如GetFiles(dircopyFrom, recetaTextBox.Text+"*.*")-这在概念上相当于"StartsWith"。你可以在精细的手册中阅读更多关于getfiles的搜索模式-模式匹配是非常基本的,但是如果你想要任何高级的东西,比如Regex,或者甚至只是区分大小写,你需要在你自己的代码中完成它

  • 要复制到的目录必须存在。我没有在代码中放入任何东西来确保这一点,但请注意,调用Directory.CreateDirectory(dirCopyTo)是安全的,即使它已经存在,所以如果有可能dir不存在,您可以在调用copy之前始终调用CreateDirectory以确保它

相关内容

最新更新