版本控制文件名并将其保存到不同的位置

时间:2014-06-15 14:04:59

标签: c#

else块Path.Combine方法结合每个部分后,在使用Console.WriteLine(result);时给出文件名。但它实际上并没有创建具有该名称的文件。

我想获取 EmployeeDetails.txt 文件,制作一个版本(即重命名文件名)并将其保存到C:\Hitory文件夹。

如何实现?

使用File.Move投掷FileNotFoundexception

void ModRec()       
{     
        string filename = @"C:\Current\EmployeeDetails.txt";
        string current = @"C:\Current\";
        string history = @"C:\History\";
        FileInfo fileinfo = new FileInfo(filename);
        if (fileinfo.Exists)
        {
            if (!Directory.Exists(history))
            {
                Directory.CreateDirectory(history);
            }
        }
        else
        {
            Console.WriteLine("\t\t\tFile doesn't exist!");
            Console.ReadLine();
            Menu1();
        }
        var extension = Path.GetExtension(filename);
        var fileNamePart = Path.GetFileNameWithoutExtension(filename); 
        var path = Path.GetDirectoryName(filename); 
        var version = 0; 
        string result;
        do
        {
            version++;
            result = Path.Combine(path, fileNamePart + "_" + version + extension); 
        }
        while (File.Exists(result));
        //File.Move(current, history);
    }

3 个答案:

答案 0 :(得分:0)

最后的循环需要稍微改变,因为

    result = Path.Combine(path, fileNamePart + "_" + version + extension); 

正在查看文件所在的目录,而不是在您希望的历史目录中,因此您将在错误的位置扫描重复项。因此,Path.Combine需要引用history

的值
    result = Path.Combine(history, fileNamePart + "_" + version + extension); 

其次,您不能使用Move以与命令行相同的方式将文件移动到目录,您需要将这两个参数指定为文件名,所以

 File.Move(current, history);

变为

 File.Move(filename, result);

因此,方法结尾处的结果代码应如下所示:

do
{
    version++;
    result = Path.Combine(history, fileNamePart + "_" + version + extension); 
}
while (File.Exists(result));
File.Move(filename, result);

顺便提一下,在测试文件是否已存在的地方,只需调用Menu1然后继续。你能保证这会确保用户做的下一件事会创建一个有效的文件吗?我猜测它很可能无法保证,所以你应该在那时退出你的方法,或者把身体的其余部分放在fileinfo.Exists区块内。

这样就不需要从这个方法中调用菜单了,但这个问题超出了你在这里所要求的范围。

答案 1 :(得分:-1)

请改为尝试:

void ModRec()       
{     
        string filename = @"C:\Current\EmployeeDetails.txt";
        string current = @"C:\Current\";
        string history = @"C:\History\";
        FileInfo fileinfo = new FileInfo(filename);
        if (fileinfo.Exists)
        {
            if (!Directory.Exists(history))
            {
                Directory.CreateDirectory(history);
            }
        }
        else
        {
            Console.WriteLine("\t\t\tFile doesn't exist!");
            Console.ReadLine();
            Menu1();
        }
        var extension = Path.GetExtension(filename);
        var fileNamePart = Path.GetFileNameWithoutExtension(filename); 
        var path = Path.GetDirectoryName(filename); 
        var version = 0; 
        string result;
        do
        {
            version++;
            result = Path.Combine(history, fileNamePart + "_" + version + extension); 
        }
        while (File.Exists(result));
        File.Move(filename, result);
    }

答案 2 :(得分:-2)

Path.Combine()根本不会触及文件系统。不会创建任何文件/文件夹。尝试File.Move(filename, history);。也就是说,移动文件(假设current是完整路径)而不是filename,而不是{{1}}。