正确使用string.format在winform中显示字符串c#

时间:2013-01-25 15:15:31

标签: c# winforms

我有一个窗口表单,其中显示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) /它不会增加里面的数字..我不知道每次复制时如何增加计数..可以告诉我什么是错误的

3 个答案:

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