如何阅读特定的文本行并将其显示在消息框中

时间:2011-04-25 07:27:46

标签: c#

我正在尝试创建以下内容。

我的应用是Windows应用,表单包含以下

  1. 两个文本框,一个用于名称,另一个用于评论
  2. 日期时间选择器
  3. 设置并重置按钮。
  4. 现在我的应用需要像以下一样工作。

    当我打开我的应用程序时,它需要向我显示消息提醒abt评论和姓名谁发表评论指定日期。

    为此我没有使用任何DataBase我创建的文件来存储注释和名称和日期。

    所以我的问题是如何阅读文字区别名称,评论和日期。

    我的代码如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;
    using System.Windows.Forms;
    namespace DateUpdater.Classes
    {
        public class FileHandling
        {
    
            public bool WritetoFile(Classes.FileParameters Params)
            {
    
    
                string directoryPath = Environment.CurrentDirectory.ToString();
    
                     directoryPath = directoryPath.ToLower().Replace("\\bin\\debug", "\\Logs\\reminder.txt");
                    File.AppendAllText(directoryPath, Params.Comments.ToString());
    
                    File.AppendAllText(directoryPath, EndCharacter());
                    File.AppendAllText(directoryPath, Params.Name.ToString());
                    File.AppendAllText(directoryPath, EndCharacter());
                    File.AppendAllText(directoryPath, Params.DateToSet.ToString());
                    File.AppendAllText(directoryPath, EndCharacter());
    
                    return true;
    
            }
    
            public Classes.FileParameters ReadFromFile()
            {
                Classes.FileParameters Params;
                string directoryPath = Environment.CurrentDirectory.ToString();
    
                directoryPath = directoryPath.ToLower().Replace("\\bin\\debug", "\\Logs\\reminder.txt");
              // string tempData= File.ReadAllText(directoryPath);
               var searchTarget = "/n";
               foreach (var line in File.ReadLines(directoryPath))
               {
                   if (line.Contains(searchTarget))
                   {
    
                       break; // then stop
                   }
               }
    
               return null; 
    
            }
    
            public string EndCharacter()
            {
                return "/n";
            }
    
        }
    }
    

    请给我解决方案......

1 个答案:

答案 0 :(得分:0)

使用AppendAllText不是最理想的,因为msdn表示每次调用它时都会打开/创建并关闭文件。在您的示例中,您将打开和关闭文件六次。 File.AppendText将是更好的选择。如果删除自定义行分隔符并使用系统默认值,则可以执行以下操作:

public bool WritetoFile(Classes.FileParameters Params)
{
    string directoryPath = Environment.CurrentDirectory.ToString();

    directoryPath = directoryPath.ToLower().Replace("\\bin\\debug", "\\Logs\\reminder.txt");
    using(StreamWriter stream = File.AppendText(directoryPath))
    {
        stream.Write(Params.Comments.ToString());
        stream.Write(SepCharacter);
        stream.Write(directoryPath, Params.Name.ToString());
        stream.Write(SepCharacter);
        stream.WriteLine(directoryPath, Params.DateToSet.ToString());
    }
    return true;
}

public char SepCharacter { get{ return '\t'; } }

这会将您的所有内容放在文本文件中的一行中,并以制表符分隔。行分隔符是默认的\r\n。确保使用不会出现在文本中的分隔符,否则需要在WritetoFile / ReadFromFile例程中屏蔽/取消屏蔽它们。 然后你就可以了

public Classes.FileParameters ReadFromFile()
{
    Classes.FileParameters Params;
    string directoryPath = Environment.CurrentDirectory.ToString();

    directoryPath = directoryPath.ToLower().Replace("\\bin\\debug", "\\Logs\\reminder.txt");
    var searchTarget = "searchString";
    foreach (var line in File.ReadLines(directoryPath))
    {
       if (line.Contains(searchTarget))
        {
            // this will give you a string array of Comment, Name and Date
            // for every line that contains "searchString"
            string[] data = line.Split( new char[] { SepCharacter } );

            break; // then stop
        }
    }

    return null; 
}

如果您的评论可以包含换行符或标签,则需要更多关于屏蔽/取消屏蔽这些评论的工作。但是这个问题也存在于你的初始例子中。

顺便说一下,对于任何拼写错误,我在记事本中这样做了; - )