C#循环读取文件流,按行读取
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; }