评论

收藏

[C++] C#循环读取文件流,按行读取

编程语言 编程语言 发布于:2021-07-25 21:57 | 阅读数:424 | 评论:0

public Dictionary<string,string> GetSourceDisksElements(String section)
{
    section = "[" + section;
    Dictionary<string, string> keyToValue = new Dictionary<string, string>();
    //打开文件流,开始读取文件
    using (StreamReader sin = new StreamReader(new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read)))
    {
        for (String str = sin.ReadLine(); str != null; str = sin.ReadLine())
        {
          if (str.Trim().StartsWith(section, StringComparison.OrdinalIgnoreCase)) //some section has comment. 
          {
            for (str = sin.ReadLine(); str != null && !str.Trim().StartsWith("["); str = sin.ReadLine()) //loop for get string, until to next section or end of file.
            {
              if (!String.IsNullOrEmpty(str.Trim()) && !str.Trim().StartsWith(";"))  //drop the comment line and empty line. //去掉name-value对的限制,因为存在无=的情况。20100309.str.Contains('=') &&  only get the name-value pair line.
              {   
                String[] keyValues = str.Split('=');
                if (section.Equals("[SourceDisksNames"))
                {
                  string[] noCommentValues = keyValues[1].Split(';');
                  string realValue = noCommentValues[0].Trim();

                  String[] sourceDiskCfg = realValue.Split(',');  //disk-description[,[tag-or-cab-file],[unused],[path],[flags][,tag-file]]  (tag-file : Windows XP and later versions of Windows)
                  String diskpath = String.Empty;
                  if (sourceDiskCfg.Length > 3)
                    diskpath = sourceDiskCfg[3].Trim();

                  if (diskpath.StartsWith("""))
                    diskpath = RemoveQuotes(diskpath);

                  if (!String.IsNullOrEmpty(diskpath) && diskpath.StartsWith("."))
                    diskpath = diskpath.Substring(diskpath.IndexOf('\\'));

                  //20150112
                  if (!String.IsNullOrEmpty(diskpath) && !diskpath.StartsWith("\"))
                    diskpath = "\" + diskpath;

      
                  keyToValue.Add(keyValues[0].Trim(), diskpath);
                }
                else
                {
            
                  string[] noCommentValues = keyValues[1].Split(';');
                  string realValue = noCommentValues[0].Trim();
                  keyToValue.Add(keyValues[0].Trim(), realValue);
                }
              }
            }
            break;
          }
        }
      }
      return keyToValue;
    }

关注下面的标签,发现更多相似文章