0

我有一个窗口形式,在其中显示列表视图中的所有目录。如果文件已经存在,则复制文件,它会再次将其复制附加 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)/ 它没有增加里面的数字..我不知道每次复制时如何增加计数..任何人都可以告诉我我做错了什么

4

3 回答 3

1

我认为以下应该对你有用。

string tempFileName = string.Format("{0}({1})", fileNameOnly, count++);

{} 中的任何内容都是占位符。您使用了 {(1)},它始终为 1。

于 2013-01-25T15:17:40.420 回答
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");
}
于 2013-01-25T15:20:31.470 回答
0

你犯了简单的错误

string tempFileName = string.Format("{0}({1})", fileNameOnly, count++);

将 {(1)} 替换为 ({1})

于 2013-01-25T15:20:49.297 回答