C#使用FileDialog创建目录并复制文件时程序崩溃如何解决
崩溃核心原因
File.Copy方法调用参数错误是直接诱因:
- 该方法第二个参数必须传入包含文件名的完整目标文件路径,你的代码里传入的是文件夹路径
@"C:\Documents\LUX\Soundbites\",运行时会直接抛出路径不合法异常,未做异常捕获时程序会直接终止。 - 代码其他可优化问题:未开启文件多选开关、重复编写了两次完全一致的文件复制逻辑、多余的目录存在性判断。
修复后代码
OpenFileDialog open = new OpenFileDialog(); open.Filter = "Wave File (*.wav)|*.wav;"; open.Multiselect = true; // 启用多文件选择,默认配置下仅支持单选 if (open.ShowDialog() == DialogResult.OK) { string targetDir = @"C:\Documents\LUX\Soundbites\"; // Directory.CreateDirectory自带存在性判断,路径已存在时不会报错 Directory.CreateDirectory(targetDir); foreach (string sourceFile in open.FileNames) { // 拼接目标文件完整路径:目标文件夹 + 源文件文件名 string targetFile = Path.Combine(targetDir, Path.GetFileName(sourceFile)); File.Copy(sourceFile, targetFile, true); } }
补充说明
- 直接往C盘系统目录写入文件可能触发UAC权限拦截,建议通过
Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)获取当前用户的文档目录拼接存储路径,规避权限问题。 - 可在文件操作逻辑外层增加
try-catch块捕获IO异常,弹出对应错误提示,避免程序无征兆退出。
内容的提问来源于stack exchange,提问作者robert
相关产品推荐
相关产品推荐

