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);
}
答案 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}}。