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

C#桌面项目如何通过RadWindow.Prompt实现新建空文本文件功能

C#桌面端仿OneNote新建文本文件功能改造方案

核心实现步骤

  • 替换原有文件选择逻辑:移除OpenFileDialog相关代码,调用RadWindow.Prompt弹出文件名输入框,首先拦截无效输入场景:用户点击取消/关闭弹窗直接终止流程;用户输入为空、包含Windows文件名非法字符(\ / : * ? " < > |)、目标路径已存在同名文件时,弹出对应提示要求用户重新输入。
  • 自动补全文件信息:如果用户输入的文件名没有带.txt后缀,自动补全后缀,避免生成无扩展名的不可识别文件;使用Path.Combine()拼接目标存储目录和文件名,不要手动拼接路径分隔符,避免出现路径格式错误。
  • 生成空白可编辑文本文件:调用文件IO接口创建空白文本文件,注意创建后及时释放文件句柄,避免文件被程序占用导致后续无法编辑。
  • 调整数据入库逻辑:替换原有的文件复制逻辑,文件大小取实际生成的空白文件的真实长度(空白txt一般为0字节,不需要写死1024),其余入库参数、界面刷新逻辑可以复用原有代码。
  • 细化异常捕获:不要用空catch块吞掉所有异常,针对权限不足、路径不存在、文件被占用等常见场景给出明确提示,方便排查问题。

改造后参考代码

private async void AddFile(object sender, RoutedEventArgs e)
{
    // 弹出文件名输入窗口,不同Telerik版本Prompt参数可以根据实际API调整
    var inputResult = RadWindow.Prompt("请输入新建文本文件名称", "新建文件");
    // 用户点击取消/未输入有效内容直接返回
    if (inputResult.DialogResult != true || string.IsNullOrWhiteSpace(inputResult.PromptResult))
    {
        return;
    }

    string inputFileName = inputResult.PromptResult.Trim();
    // 自动补全.txt后缀
    if (!inputFileName.EndsWith(".txt", StringComparison.OrdinalIgnoreCase))
    {
        inputFileName += ".txt";
    }

    // 校验文件名非法字符
    char[] invalidChars = Path.GetInvalidFileNameChars();
    if (inputFileName.IndexOfAny(invalidChars) >= 0)
    {
        RadWindow.Alert("文件名包含非法字符,请重新输入");
        return;
    }

    string targetDir = Settings[0].SettingValue;
    // 若目标目录不存在则提前创建
    if (!Directory.Exists(targetDir))
    {
        Directory.CreateDirectory(targetDir);
    }
    string targetFullPath = Path.Combine(targetDir, inputFileName);

    // 校验重名
    if (File.Exists(targetFullPath))
    {
        RadWindow.Alert("当前目录已存在同名文件,请更换名称");
        return;
    }

    try
    {
        // 创建空白文本文件,using会自动释放文件流,避免文件被占用无法编辑
        using (File.Create(targetFullPath)) { }
        // 取文件实际大小
        long fileSize = new FileInfo(targetFullPath).Length;
        // 录入数据库,参数可根据实际业务逻辑调整
        await _db.FileInsert(1, inputFileName, fileSize, targetFullPath, "a", "FileAddTest", "FileAddTest");
        // 复用原有界面刷新逻辑
        MessageBus.Default.Publish(new RefreshMessage(this, "Refresh"));
    }
    catch (Exception ex)
    {
        RadWindow.Alert($"文件创建失败:{ex.Message}");
    }
}

扩展优化点

  • 如果需要支持其他类型的空白文件(比如md、rtf),可以在弹窗里增加文件类型下拉选项,根据用户选择对应补全后缀即可。
  • 如果要更贴近OneNote的交互,可以在文件创建、界面刷新完成后,直接触发新文件的重命名/编辑态,减少用户操作步骤。

内容的提问来源于stack exchange,提问作者Schootkey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 09:54:30