0

我再次需要你的帮助:)

public partial class Form1 : Form
{
    const string v_datoteko = @"\\Cartman-pc\k\test"; // prenese v katero koli mapo le, da imaš dovoljenje!
    const string iz_datoteke = @".\posnetki07"; // mora biti v isti mapi kot .exe!( primer: posnetki s v c:\  program mora biti v c:\ ne v mapi. !
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        DirectoryInfo dir = new DirectoryInfo(iz_datoteke);
        if (!dir.Exists)
        {
            throw new Exception("Mapa ne obstaja: " + iz_datoteke);
        }
        if (!Directory.Exists(v_datoteko))
        {
            Directory.CreateDirectory(v_datoteko);

        }
        FileInfo[] files = dir.GetFiles();
        foreach (FileInfo file in files)
        {

            string temppath = Path.Combine(v_datoteko, file.Name);
            file.CopyTo(temppath);
        }

    }

程序运行良好,直到我想复制文件,该文件已经在文件夹中,然后我得到一个错误。所以我知道我需要做类似的事情

//if ( File.Exists( path ) ) 
     File.Move( path, path + ".old" );  

但我是 c# 的新手,我不知道把它放在哪里。:) 所以谢谢你的帮助

4

4 回答 4

1

你只需要做

file.CopyTo(temppath, false);

第二个参数是否覆盖。您可以将其设为 false,因为您只需要在文件不存在时复制该文件。

如果您需要覆盖,请将其设置为 true。

FileInfo.CopyTo 方法(字符串,布尔值)


如果文件存在,则需要使用新名称复制文件

temppath = File.Exists(temppath)? temppath+ ".old":temppath;

File.CopyTo(temppath);
于 2013-09-19T07:53:19.507 回答
1

将文件路径检查放在 file.CopyTo(temppath); 之前

if(File.Exists(temppath))
{
  File.Move( temppath, temppath+ ".old" ); 
  // instead of "old" use something unique such as timestamp
}
file.CopyTo(temppath);
于 2013-09-19T07:56:21.723 回答
0
foreach (FileInfo file in files)
{
    string temppath = Path.Combine(v_datoteko, file.Name);
    if(File.Exists(temppath))
        file.CopyTo(Path.Combine(v_datoteko, file.Name + ".old");
    else                
        file.CopyTo(temppath);
}
于 2013-09-19T07:52:10.500 回答
0

周围file.CopyTo(temppath);

if (!temppath.exists){
  file.CopyTo(temppath);
}

您还可以捕获错误并在最后生成提及文件的错误列表,这些文件没有被复制:)

于 2013-09-19T07:52:35.553 回答