我有一个窗口表单,其中显示listview中的所有目录。如果文件已经存在则复制文件将其复制再次附加file.txt(1)。如果再次复制file.txt (2)
string fileNameOnly = Path.GetFileNameWithoutExtension(file);
string extension = Path.GetExtension(file);
string pathDir = Path.GetDirectoryName(file);
string tempFileName = string.Format("{0}({1})", fileNameOnly, count++);
string newfileName = Path.Combine(pathDir, tempFileName + extension);
if (MessageBox.Show(file + "is already exists\r\nDo you want to copy Again?",
"Overwrite", MessageBoxButtons.OKCancel,
MessageBoxIcon.Asterisk) == DialogResult.OK)
{
// Directory.Move(file, Path.Combine(new string[] { DestinationFolder, newfileName }));
File.Copy(file, Path.Combine(new string[] { DestinationFolder, newfileName }));
MessageBox.Show("File Copied");
但问题在于,当我一次又一次地复制文件时,模式就像file.txt(1)/file.txt(1)(1)/file.txt(1)(1)(1) /它不会增加里面的数字..我不知道每次复制时如何增加计数..可以告诉我什么是错误的
答案 0 :(得分:1)
我认为以下应该适合你。
string tempFileName = string.Format("{0}({1})", fileNameOnly, count++);
{}内的任何内容都是占位符。你使用的{(1)}总是1。
答案 1 :(得分:1)
count++
表示变量在评估后递增。你可能想要这个:
string tempFileName = string.Format("{0}({1})", fileNameOnly, ++count);
(请注意,我也将括号移到了大括号外面)
修改强>:
此外,您始终使用完整的文件名(不带扩展名)来创建新文件名。但是你应该用old-number + 1替换old-number。
请改为尝试:
int count = 0;
string fullPath = file;
while (File.Exists(fullPath))
{
string fileName = Path.GetFileName(file);
string extension = Path.GetExtension(fileName);
string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(fileName);
int lastIndexOfOpenBracket = fileNameWithoutExtension.LastIndexOf('(');
string fileNameWithoutNumber = fileNameWithoutExtension.Substring(0, lastIndexOfOpenBracket);
fileNameWithoutExtension = string.Format("{0}({1})", fileNameWithoutNumber, ++count);
fullPath = Path.Combine(DestinationFolder, fileNameWithoutExtension + extension);
}
if (MessageBox.Show(file + " already exists\r\nDo you want to copy Again?",
"Overwrite", MessageBoxButtons.OKCancel,
MessageBoxIcon.Asterisk) == DialogResult.OK)
{
File.Copy(file, fullPath);
MessageBox.Show("File Copied");
}
答案 2 :(得分:0)
你做了简单的错误
string tempFileName = string.Format("{0}({1})", fileNameOnly, count++);
将{(1)}替换为({1})