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

我正在尝试处理一组文件,我有给定数量的 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 文件)并应用一些过滤。但我收到此错误:“该进程无法访问该文件,因为它正被另一个进程使用。”


倚天杖
浏览 148回答 1
1回答

慕容3067478

您正在使用以下行处理流阅读器sr.Dispose();使用“使用”语句将在流脱离上下文后进行处理。所以删除 Dispose 行(如果下面不清楚)
打开App,查看更多内容
随时随地看视频慕课网APP