为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我会收到“该进程无法访问该文件,因为它正被另一个进程使用”的消息。

为什么我会收到“该进程无法访问该文件,因为它正被另一个进程使用”的消息。

C#
倚天杖 2023-04-29 15:31:16
我正在尝试处理一组文件,我有给定数量的 txt 文件,我目前正在加入 1 个 txt 文件以应用过滤器。从多个文件创建 1 个文件效果很好。但我有 2 个问题和 1 个错误,我似乎无法解决。1 - 当我尝试读取新创建的文件时出现错误,因此我可以应用过滤器。“该进程无法访问该文件,因为它正被另一个进程使用。”2 - 我是以正确或更有效的方式接近这个吗?我的意思是可以在创建串联文件之前应用读取和过滤吗?我的意思是我仍然需要创建一个新文件,但最好能够在创建之前应用所有内容,以便文件已经清理并准备好在应用程序外部使用。这是有问题的当前代码和我在发布文件时的其他尝试的 1 条注释行private DataTable processFileData(string fname, string locs2 = "0", string effDate = "0", string items = "0")    {        DataTable dt = new DataTable();        string fullPath = fname;        try        {            using (StreamReader sr = new StreamReader(File.OpenRead(fullPath)))            //using (StreamReader sr = new StreamReader(File.Open(fullPath,FileMode.Open,FileAccess.Read, FileShare.Read)))            {                while (!sr.EndOfStream)                {                    string line = sr.ReadLine();                    if (!String.IsNullOrWhiteSpace(line))                    {                        string[] headers = line.ToUpper().Split('|');                        while (dt.Columns.Count < headers.Length)                        {                            dt.Columns.Add();                        }                        string[] rows = line.ToUpper().Split('|');                        DataRow dr = dt.NewRow();                        for (int i = 0; i < rows.Count(); i++)                        {                            dr[i] = rows[i];                        }                        dt.Rows.Add(dr);                    }                }                //sr.Close();                sr.Dispose();            }            string cls = String.Format("Column6 NOT LIKE ('{0}')", String.Join("','", returnClass()));            dt.DefaultView.RowFilter = cls;            return dt;        }        catch (IOException ex)        {            Console.WriteLine(ex.Message);            return dt;        }我试图完成的是读取最小(2 或 3 个 txt 文件和多达 13 个 txt 文件)并应用一些过滤。但我收到此错误:“该进程无法访问该文件,因为它正被另一个进程使用。”
查看完整描述

1 回答

?
慕容3067478

TA贡献1773条经验 获得超3个赞

您正在使用以下行处理流阅读器

sr.Dispose();

使用“使用”语句将在流脱离上下文后进行处理。所以删除 Dispose 行(如果下面不清楚)


查看完整回答
反对 回复 2023-04-29
  • 1 回答
  • 0 关注
  • 82 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信