0

リストビューにすべてのディレクトリを表示するウィンドウフォームがあります。ファイルが既に存在する場合はファイルをコピーし、file.txt(1)を追加してコピーします。

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 を old-number+1 に置き換える必要があります。

代わりにこれを試してください:

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 に答える