簡體   English   中英

無法將文件從列表框移動到新創建的文件夾

[英]Unable to move files from a listbox to a newly created folder

我在將文件從列表框移動到新創建的文件夾時遇到問題。 我得到:該文件已存在時無法創建文件。

public void CreateFolders()
    {            
        //create folders
        string folder1 = pattern.Substring(0, 2);
        string folder2 = pattern.Substring(3, 2);
        string folder3 = pattern.Substring(6, 2);
        Directory.CreateDirectory("c:\\destinationfolder" + "\\" + folder1);
        Directory.CreateDirectory("c:\\destinationfolder" + "\\" + folder1 + "\\" + folder2);
        Directory.CreateDirectory("c:\\destinationfolder" + "\\" + folder1 + "\\" + folder2 + "\\" + folder3);
        var destinationDirectoryFinal = Directory.CreateDirectory("c:\\destinationfolder" + "\\" + folder1 + "\\" + folder2 + "\\" + folder3);
        destinationDirectory = destinationDirectoryFinal.FullName.ToString();
    }

    public void MoveFiles()
    {
        try
        {
            //Move files from listbox to newly created folders
            foreach (string files in listBox1.Items)
            {
                File.Move(files, destinationDirectory);
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("Error: " + ex);
        }

    }

您在此處遇到的問題是,您試圖將文件移動到已經包含該名稱文件的目錄中。

您可以從以下兩個選項中進行選擇:

選項一

嘗試Move之前檢查文件是否存在

foreach (var file in listBox1.Items)
{
    // Only move the file if it doesn't already exist
    if (!File.Exists(Path.Combine(destinationDirectory, Path.GetFileName(file))))
    {
        File.Move(file, destinationDirectory);
    }
}

選項二

如果存在,請始終覆蓋該文件。 我們可以File.Copy進行操作-首先通過將File.Copy的“ overwrite”參數設置為true ,然后通過調用File.Delete來刪除原始位置的文件:

foreach (var file in listBox1.Items)
{
    // If the destination file already exists, overwrite it. Then delete the original
    File.Copy(file, Path.Combine(destinationDirectory, Path.GetFileName(file)), true);
    File.Delete(file);
}


注意:防止錯誤(無論哪種情況)的另一件事是,在嘗試任何操作之前,請確保源文件存在,並且源目錄與目標目錄不同:

foreach (var file in listBox1.Items)
{
    // Ensure that the file exists and that the source 
    // and destination directories are not the same
    if (!(File.Exists(file)) ||
        Path.GetDirectoryName(file).Equals(
            destinationDirectory, StringComparison.OrdinalIgnoreCase))
    {
        continue; // Continue to the next loop iteration without doing anything
    }

    // Rest of loop code here...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM