Можно ли сначала прочесть файл, а потом открыть его в потоке - C#
Формулировка задачи:
Чувствую, что путаюсь в многочисленных классах файлов/потоков. Пробовал и так и этак - либо выдаст написанное мной общее исключение, либо сделает всё для двух строчек (одной итерации) и зависает. Строк в файле 12 - через одну идут строки с целыми числами, разделённые пробелами.
В коде, если не говорить огульно, мне не нравится, что у меня файл сначала открывается для считывания содержимого в массив строк, а потом открывается в потоке - может быть в этом ошибка.
string[] fullLine = File.ReadAllLines("C://Work c//Cardial.txt", Encoding.Default); string newTempLine = "hjxyjtrjjsgf"; int c = -1; FileStream strm = File.Open(@"C:\Work c\Cardial.txt", FileMode.Create, FileAccess.Write); StreamWriter writer = new StreamWriter(strm); if (strm != null) { /*for (int i = 1; i < 12; i += 2) { c += 2; string[] tempLine = fullLine[i].Split(' '); //if (i == 1) MessageBox.Show("{0}", tempLine.ToString()); //newFullLine = new string[tempLine.Length]; foreach (string s in tempLine) { newTempLine += "drabadan";//(int.Parse(s) + rnd.Next(12, 120)).ToString(); newTempLine += " "; } //if(i==1) MessageBox.Show("{0}", newTempLine);*/ writer.WriteLine("#{0}", c); writer.WriteLine(newTempLine); //foreach (string s in newTempLine) //sw2.WriteLine(newTempLine); //} writer.Flush(); } writer.Close();
Решение задачи: «Можно ли сначала прочесть файл, а потом открыть его в потоке»
textual
Листинг программы
string fileName = @"P:\321\Cardial.txt"; string tempName = Path.Combine( Path.GetDirectoryName(fileName), string.Format(@"{0}.txt", Guid.NewGuid())); using (var sr = new StreamReader(fileName)) using (var wr = new StreamWriter(tempName)) { Random rnd = new Random(); int counter = 0, iNum; string line; while ((line = sr.ReadLine()) != null) { if (counter++ % 2 == 0) continue; wr.WriteLine("#{0}", counter); // тут я не знаю что нужно выводить в задаче string[] nums = line.Split((string [])null, StringSplitOptions.RemoveEmptyEntries); foreach (var sNum in nums) { if (int.TryParse(sNum, out iNum)) { wr.Write(iNum + rnd.Next(12, 120)); wr.Write(" "); } } wr.WriteLine(); } } File.Delete(fileName); File.Move(tempName, fileName);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д