You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Avalonia UI应用新建文件后删除触发FileNotFound Exception问题

问题分析与修复方案

问题根源

创建文件后立即删除触发FileNotFoundException,重启后可正常删除,核心原因是文件路径处理逻辑不一致:

  • 保存新文件时,代码通过Path.Combine(saveDirectory, note.Filename)将文件写入saveDirectory目录,但note.Filename仅存储文件名,未包含完整路径。
  • 删除操作直接使用note.Filename检查文件存在性,此时程序工作目录并非saveDirectory,导致找不到刚创建的文件。
  • 重启后加载文件时,程序会从saveDirectory读取文件并将完整路径赋值给note.Filename,因此删除操作能正常执行。

修复方案

统一文件路径处理逻辑,确保保存和删除操作都基于saveDirectory构建完整路径:

修改SaveToFile方法

移除分支判断,统一拼接完整路径,避免路径不一致:

public static void SaveToFile(NoteModel note)
{
    if (!Directory.Exists(saveDirectory))
    {
        Directory.CreateDirectory(saveDirectory);
    }
    try
    {
        string filepath = Path.Combine(saveDirectory, note.Filename);
        File.WriteAllText(filepath, note.Content);
    }
    catch (Exception ex)
    {
        throw new Exception($"Error saving file: {note.Filename}\nMessage: {ex.Message}");
    }
}

修改DeleteFile方法

同样基于saveDirectory构建完整路径来检查和删除文件:

public static void DeleteFile(NoteModel note)
{
    if(Directory.Exists(saveDirectory))
    {
        try
        {
            string filepath = Path.Combine(saveDirectory, note.Filename);
            if(File.Exists(filepath))
            {
                File.Delete(filepath);
            }
            else
            {
                throw new FileNotFoundException($"File not found: {filepath}");
            }
        }
        catch (Exception ex) 
        {
            throw new Exception($"Error deleting file: {note.Filename}\nMessage: {ex.Message}");
        }
    }
    else
    {
        throw new DirectoryNotFoundException($"No Save Directory Found: {saveDirectory}");
    }
}

额外建议

若希望NoteModel.Filename存储完整路径而非仅文件名,可调整逻辑如下:

  1. 保存时从完整路径中提取目录并确保其存在
  2. 删除时直接使用完整路径操作

修改后的SaveToFile示例:

public static void SaveToFile(NoteModel note)
{
    string fileDir = Path.GetDirectoryName(note.Filename);
    if (!Directory.Exists(fileDir))
    {
        Directory.CreateDirectory(fileDir);
    }
    try
    {
        File.WriteAllText(note.Filename, note.Content);
    }
    catch (Exception ex)
    {
        throw new Exception($"Error saving file: {note.Filename}\nMessage: {ex.Message}");
    }
}

内容的提问来源于stack exchange,提问作者Gnome-Improvement713

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 04:06:29