Можно ли сначала прочесть файл, а потом открыть его в потоке - 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);