c# - 访问多个文件

标签 c#

我的程序没有循环遍历文件。该程序正确地将所有文件名写入“文件列表”。然后我希望它输出每个文件中数据列表的平均值、最小值和最大值。但是,无论何时运行,它都只输出一个文件的平均值、最小值和最大值。我认为循环效果不是很好。

我尝试在 textwriter tw3 和它的右括号之间创建额外的循环,但这没有用。我也对 tw4 进行了同样的尝试,但还是没有用。我不确定问题是由于循环还是我没有使用正确的语法来调用文件夹中的每个文件。完整代码如下。

namespace Filereader_m_15062012
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        string[] fileEntries;

        private void Form1_Load(object sender, EventArgs e)
        {
            DialogResult result = folderBrowserDialog1.ShowDialog(); // Show the dialog.
            // create a list to insert the data into
            //put all the files in the root directory into array
            string[] fileEntries = Directory.GetFiles(folderBrowserDialog1.SelectedPath, "*.csv");

            // Display all files.
            TextWriter tw1 = new StreamWriter(folderBrowserDialog1.SelectedPath + "/listoffiles.txt");

            List<string> filenames = new List<string>();
            tw1.WriteLine("--- Files: ---");
            foreach (string path in fileEntries)
            {
                tw1.WriteLine(path);
            }

            tw1.Close();

            TextWriter tw2 = new StreamWriter(folderBrowserDialog1.SelectedPath + "/errorlist.txt");
            foreach (string path in fileEntries)
            {  
                    string text = "";

                    // create a list to insert the data into
                    List<float> noise = new List<float>();

                    TextWriter tw3 = new StreamWriter(folderBrowserDialog1.SelectedPath + "/rawdata.txt");

                    string file = path;

                    FileInfo src = new FileInfo(file);
                    TextReader reader = src.OpenText();
                    text = reader.ReadLine();

                    // while the text being read in from reader.Readline() is not null
                    while (text != null)
                    {
                        text = reader.ReadLine();

                        {
                            while (text != null)
                            {
                                text = reader.ReadLine();
                                if (text != null)
                                {
                                    string[] words = text.Split(',');
                                    noise.Add(Convert.ToSingle(words[3]));

                                    // write text to a file
                                    tw3.WriteLine(text);
                                    //foreach (string word in words)
                                    //{
                                    //    tw.WriteLine(word);
                                    //}
                                }

                            }
                        }

                        tw3.Close();


                        int count = 0;
                        float sum = 0;
                        float mean = 0;
                        float max = 0;
                        float min = 100;
                        List<string> means = new List<string>();
                        List<string> maximums = new List<string>();
                        List<string> minimums = new List<string>();

                        TextWriter tw4 = new StreamWriter(folderBrowserDialog1.SelectedPath + "/noise.txt");

                            foreach (float ns in noise)
                            {
                                tw4.WriteLine(Convert.ToString(ns));
                                count++;
                                sum += ns;
                                mean = sum / count;

                                float min1 = 0;


                                if (ns > max)
                                    max = ns;

                                else if (ns < max)
                                    min1 = ns;

                                if (min1 < min && min1 > 0)
                                    min = min1;
                                else
                                    min = min;
                            }

                            means.Add(Convert.ToString(mean));
                            maximums.Add(Convert.ToString(max));
                            minimums.Add(Convert.ToString(min));


                            TextWriter tw5 = new StreamWriter(folderBrowserDialog1.SelectedPath + "/summarymeans.txt");
                            tw5.WriteLine("Mean Noise");
                            tw5.WriteLine("==========");
                            foreach (string m in means)
                            {
                                tw5.WriteLine("mote_noise: {0}", Convert.ToString(m));
                            }

                            tw5.Close();

                            TextWriter tw6 = new StreamWriter(folderBrowserDialog1.SelectedPath + "/summarymaximums.txt");
                            tw6.WriteLine("Maximum Noise");
                            tw6.WriteLine("=============");
                            foreach (string m in maximums)
                            {
                                tw6.WriteLine("mote_noise: {0}", Convert.ToString(m));
                            }

                            tw6.Close();

                            TextWriter tw7 = new StreamWriter(folderBrowserDialog1.SelectedPath + "/summaryminimums.txt");
                            tw7.WriteLine("Minimum Noise");
                            tw7.WriteLine("=============");
                            foreach (string m in maximums)
                            {
                                tw7.WriteLine("mote_noise: {0}", Convert.ToString(m));
                            }

                            tw7.Close();


                        tw4.Close();


                    }


                tw2.Close();
            }
        }        


        private void folderBrowserDialog1_HelpRequest(object sender, EventArgs e)
        {

        }

    }
}

我将非常感谢任何人的帮助!!

最佳答案

您在迭代文件的 for 循环初始化您的数字(均值、模式、总和、计数等),因此它们会针对每个文件进行重置。

在循环外初始化它们,它应该可以工作。 (正如其他人指出的那样,代码还有其他问题,看起来不太干净,但这是根本问题。)

关于c# - 访问多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11120777/

相关文章:

C# 与 SQL Server SELECT WHERE IN 与数据列表

c# - Excel Interop DLL 的 Clickonce 异常

c# - 为什么 string.contains() 返回 false?

c# - .Net 完整配置文件配置的 Microsoft.ServiceBus.dll 问题

c# - C#中两个结构的相等性

c# - C# 中的内存使用情况

c# - 带有支持所有方向的动画的扩展器

c# - 我如何回滚或知道我突然移动的文件夹是错误的?

c# - 查找方法中使用了哪些 using 指令

c# - 如何在对象的所有私有(private)字段中获取实例?