如何通过文本框输入内容判断文件夹中是否存在对应文件及代码修复方法
问题修复方案
你的代码存在4个核心错误,对应修改逻辑如下:
- 拼写错误:按钮点击触发方法
PreformClick是笔误,正确写法为PerformClick File.Exists仅支持校验单个具体文件路径,不支持通配符*匹配,永远会返回false,需要替换为目录文件搜索接口- 没有读取文本框的用户输入值,当前路径是硬编码的固定通配符,和查找需求无关
- 缺少输入合法性校验,空输入、特殊字符输入都会触发异常
修改后的完整代码
using System.IO; using System.Text.RegularExpressions; // 回车键触发查询的事件 public void name_txtb_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { // 修复拼写错误 check_btn.PerformClick(); // 避免回车键输入继续触发其他逻辑 e.SuppressKeyPress = true; } } public void check_btn_Click(object sender, EventArgs e) { string searchDir = @"C:\books\"; string inputKeyword = name_txtb.Text.Trim(); // 校验输入为空的情况 if (string.IsNullOrEmpty(inputKeyword)) { MessageBox.Show("请输入查找短语"); return; } // 移除输入中的非法文件名字符,避免搜索报错 inputKeyword = Regex.Replace(inputKeyword, @"[\\/:*?""<>|]", string.Empty); // 构造搜索规则:文件名包含用户输入短语的txt文件 string searchPattern = $"*{inputKeyword}*.txt"; // 搜索匹配的文件 string[] matchedFiles = Directory.GetFiles(searchDir, searchPattern, SearchOption.TopDirectoryOnly); if (matchedFiles.Length > 0) { pup_exists pe = new pup_exists(); pe.ShowDialog(); } else { Form3 f3 = new Form3(); f3.ShowDialog(); } }
改动说明
- 修正了
PerformClick的拼写错误,额外添加了e.SuppressKeyPress = true避免回车键输入后出现光标换行的问题 - 新增了输入合法性校验,避免空输入、带特殊字符的输入触发运行异常
- 替换了不支持通配符的
File.Exists,改用Directory.GetFiles接口按规则搜索目录下的匹配文件 - 搜索规则拼接了用户在文本框输入的短语,实现了按输入内容查找的需求
- 如果你需要搜索子目录下的文件,可以把
SearchOption.TopDirectoryOnly改为SearchOption.AllDirectories
内容的提问来源于stack exchange,提问作者Marcus Stone
相关产品推荐
相关产品推荐

