出于某种原因,安装它的用户,当他们点击按钮时,没有任何反应。此外,如果我采取尝试和捕获,它说文件已经存在,但它没有。子文件夹,但不是文件。怎么了?这是我的代码:
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);
}
答案 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)
您是否验证变量sourceFile
和destinationFile
的内容(通过调试),或假设组合正如您所期望的那样工作?
另外,请告诉我您很清楚此实施所带来的注入风险,并且您要确保仔细验证listBox1
和comboBox1
值。
答案 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