使用C#实现文件转移时提示找不到1.jar文件的技术求助
排查C# File.Move找不到文件的问题
嘿,我来帮你搞定这个「找不到1.jar」的问题!咱们一步步来排查:
1. 先搞清楚当前工作目录到底是什么
你用Directory.GetCurrentDirectory()获取的当前目录,可能和你预想的不一样!比如在Visual Studio里调试时,默认工作目录是项目的根目录,而不是bin/Debug或bin/Release的输出目录——如果你的1.jar是放在输出目录里,那就肯定找不到了。
你可以先加一行代码,把当前目录直观地展示出来:
private void button1_Click(object sender, EventArgs e) { string curDir = Directory.GetCurrentDirectory(); // 弹出窗口显示当前目录,方便排查 MessageBox.Show($"当前工作目录:{curDir}"); // ... 剩下的代码 }
2. 别手动拼接路径,用Path.Combine更靠谱
你现在用curDir + @"\1.jar"的方式拼接路径,如果curDir末尾已经有反斜杠(比如C:\MyProject\bin\Debug\),就会变成C:\MyProject\bin\Debug\\1.jar——虽然大部分情况下系统能识别,但这种写法容易出意外。换成Path.Combine是更安全的选择:
// 替换原来的路径拼接代码 string path = Path.Combine(curDir, "1.jar"); string path2 = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "Desktop", "2.jar");
直接用Environment.GetFolderPath返回的字符串拼接,比把DirectoryInfo转成字符串更稳妥。
3. 确认1.jar真的在正确的位置
- 如果是调试阶段:确保
1.jar文件被复制到了程序的输出目录(也就是刚才弹窗显示的curDir路径里)。你可以右键项目里的1.jar文件,设置「复制到输出目录」为「始终复制」,这样每次编译都会把文件同步过去。 - 如果是发布后的程序:把
1.jar和exe放在同一个文件夹里,或者手动指定正确的源文件绝对路径。
额外优化:加个文件存在判断
给代码加个前置检查,能更明确地定位问题,避免模糊的报错:
private void button1_Click(object sender, EventArgs e) { string curDir = Directory.GetCurrentDirectory(); MessageBox.Show($"当前工作目录:{curDir}"); string path = Path.Combine(curDir, "1.jar"); string path2 = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "Desktop", "2.jar"); if (File.Exists(path)) { File.Move(path, path2); MessageBox.Show("文件移动成功!"); } else { MessageBox.Show($"找不到目标文件:{path}"); } }
内容的提问来源于stack exchange,提问作者Batuhan Aksoy
相关产品推荐
相关产品推荐

