在C#中将文件移动到子文件夹中麻烦?

时间:2012-05-22 20:50:33

标签: c# visual-c#-express-2010

出于某种原因,安装它的用户,当他们点击按钮时,没有任何反应。此外,如果我采取尝试和捕获,它说文件已经存在,但它没有。子文件夹,但不是文件。怎么了?这是我的代码:

            string pathUser4 = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
            string pathDownload4 = (pathUser4 + @"\Downloads\");
            string sourceFile = pathDownload4 + listBox1.Text;

            string pathdoc5 = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
            string pathDownload5 = (pathdoc5 + @"\iracing\setups\");
            string destinationFile = pathDownload5 + comboBox1.Text;

            File.Move(sourceFile, destinationFile);
        }
        catch { }
            if (comboBox1.Text == "Select File Destination")
            {
                MessageBox.Show("Please Select A Destination Folder", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

4 个答案:

答案 0 :(得分:0)

我认为您的第一个问题是您在尝试移动文件后检查comboBox1.Text是否有正确的值。

第二次使用Path对象,如MichelZ建议的那样。它更容易,不应该导致任何问题。

以下是您的代码对更改的期望:

        // TODO: check for listBox1.Text to be blank or non-file

        if (comboBox1.Text == "Select File Destination")
        {
            MessageBox.Show("Please Select A Destination Folder", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

        string sourceFile = Path.Combine(Environment.SpecialFolder.UserProfile, "Downloads", listBox1.Text;
        string destinationFile = Path.Combine(Environment.SpecialFolder.MyDocuments, "iracing", "setups", comboBox1.Text;
        File.Move(sourceFile, destinationFile);
    }
    catch { }

答案 1 :(得分:0)

您是否验证变量sourceFiledestinationFile的内容(通过调试),或假设组合正如您所期望的那样工作?

另外,请告诉我您很清楚此实施所带来的注入风险,并且您要确保仔细验证listBox1comboBox1值。

答案 2 :(得分:0)

首先,同一目录中的文件和目录的名称不能完全相同。 在Windows中,目录和文件的名称不是单独的属性。 你的评论给了我一些暗示。因此,您从.NET获得的例外是准确的。

问题与拥有try-catch块无关,似乎你在责备它。了解你的错误总是一个好主意。

一种编码方法是在File.Move之前检查文件/目录是否存在,这是一种旧方法:)

答案 3 :(得分:0)

要了解File.Move之前的问题,可能会有用

  

Debug.Assert(!File.Exists(destinationFile),String.Format(“file already exists:{0}”,destinationFile))

如果无法调试,则可以显示具有等效用途的MessageBox