File.WriteAllText抛出“找不到文件”异常求助(VS2012 VB.NET)
解决File.WriteAllText抛出“找不到文件”异常的问题(.NET Framework 4.5.2 VB.NET)
问题场景
环境:Visual Studio 2012、VB.NET Windows窗体应用、.NET Framework 4.5.2
代码中File.WriteAllText抛出“找不到文件”异常,但官方文档显示该方法仅会抛出ArgumentException、ArgumentNullException等指定类型异常。已排查文件路径、尝试以管理员身份运行、重启电脑,问题仍存在。
原代码:
Dim filepath As String = StringFilePath + "\" + DateTime.Now.ToString("yyyy/MM") Dim stringFile As String = "" If My.Computer.FileSystem.DirectoryExists(filepath) = False Then My.Computer.FileSystem.CreateDirectory(filepath) End If stringFile = StringHTMLHeader + StringTestDoc + StringHTMLFooter StringLastSavedFile = Path.Combine(filepath, "Test Result " + DateTime.Now.ToString("dd-HH-mm-ss") + ".htm") Try File.WriteAllText(StringLastSavedFile, stringFile) Catch ex As Exception End Try
问题根源
代码生成目录路径时使用了DateTime.Now.ToString("yyyy/MM"),Windows系统的目录名称不允许包含/字符(该字符是路径分隔符),导致My.Computer.FileSystem.CreateDirectory(filepath)执行失败(代码未捕获此异常,因此无法感知)。后续File.WriteAllText尝试写入不存在的目录下的文件,从而触发“找不到文件”异常。
修正方案
- 将日期格式中的
/替换为Windows允许的目录名字符(如-),确保生成合法的目录路径; - 增加异常捕获逻辑,便于排查后续问题;
- 统一使用
Path.Combine拼接路径,避免手动拼接时出现路径分隔符错误。
修正后的代码:
Dim filepath As String = Path.Combine(StringFilePath, DateTime.Now.ToString("yyyy-MM")) Dim stringFile As String = StringHTMLHeader + StringTestDoc + StringHTMLFooter Try ' 确保目录存在,若不存在则创建 If Not My.Computer.FileSystem.DirectoryExists(filepath) Then My.Computer.FileSystem.CreateDirectory(filepath) End If Dim fileName As String = $"Test Result {DateTime.Now.ToString("dd-HH-mm-ss")}.htm" StringLastSavedFile = Path.Combine(filepath, fileName) File.WriteAllText(StringLastSavedFile, stringFile) Catch ex As Exception ' 输出异常信息便于排查 MessageBox.Show($"操作失败:{ex.Message}{Environment.NewLine}{ex.StackTrace}") End Try
内容的提问来源于stack exchange,提问作者user22716518
相关产品推荐
相关产品推荐

