0

出于某种原因,安装这个的用户,当他们点击按钮时,什么也没有发生。另外,如果我尝试并抓住,它说文件已经存在,但它不存在。子文件夹会,但不是文件。怎么了?这是我的代码:

            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

4 回答 4

0

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

其次,按照 MichelZ 的建议使用 Path 对象。它更容易,不应该引起任何问题。

以下是您的代码希望更改的内容:

        // 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 { }
于 2012-05-22T21:01:23.113 回答
0

您是在验证变量的内容sourceFiledestinationFile(通过调试),还是假设组合按您期望的那样工作?

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

于 2012-05-22T21:04:05.027 回答
0

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

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

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

于 2012-05-22T21:12:17.443 回答
0

了解 File.Move 之前的问题在哪里可能很有用

Debug.Assert(!File.Exists(destinationFile),String.Format("文件已存在:{0}",destinationFile))

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

于 2012-05-22T21:14:15.350 回答