Дозапись в файл с новой строки с указанием текущего времени - C#
Формулировка задачи:
написал программу , которая с помощью двух потоков делает запись в файл. с разными интервалами времени.
во время работа программы :
если открываешь файл, то видишь статическую картинку на момент открытия, что записалось
например
PetrAlexAlexPetrAlexAlex
закрыл , подождал, открыл
PetrAlexAlexPetrAlexAlexPetrAlexAlexPetrAlexPetrAlexAlexPetrAlexPetrAlexAlexPetrAlexAlexPetrAlexAlexPetrAlexPetrAlexAlex PetrAlexAlex
а как сделать так , чтобы каждую запись сделать отдельной строкой с указанием времени
( чтобы понять, что это было записано вовремя - такое-то )
и еще у меня вся работа с файлом внутри блокировки.
как это можно минимизировать ?
подскажите пожалуйста.
using System; using System.IO; using System.Text; using System.Threading; namespace ConsoleApplication123 { public class InnerClassTest { public static void Main(String[] args) { TalkingClock clock = new TalkingClock(3000, true, "Alex"); TalkingClock clock2 = new TalkingClock(5000, true, "Petr"); clock.Start(); //clock.join(); clock2.Start(); Console.ReadLine(); } } class TalkingClock { private Timer t; private TimerPrinter listener; public TalkingClock(int interval, Boolean beep, String name) { this.interval = interval; this.beep = beep; this.name = name; } public void Start() { listener = new TimerPrinter(); t = new Timer(new TimerCallback(listener.CheckStatus), this, 0, interval); } void OnTick() { } private int interval; private Boolean beep; public String name; } class TimerPrinter { static object fileLocker = new object(); // This method is called by the timer delegate. public void CheckStatus(Object stateInfo) { try { lock (fileLocker)//лок для предотвращения одновременной записи в файл разными потоками { TalkingClock sender = stateInfo as TalkingClock; using (StreamWriter sw = new StreamWriter("D:\\Variables.txt", true, Encoding.ASCII)) sw.Write(sender.name); } } catch (FileNotFoundException e) { Console.WriteLine(" не найден файл "); } catch (IOException e) { Console.WriteLine(" дргуая ошибка на ввод - вывод "); } } } }
Решение задачи: «Дозапись в файл с новой строки с указанием текущего времени»
textual
Листинг программы
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class MyFileWriter{ private FileOutputStream out; public MyFileWriter(){ File f=new File("test.txt"); try { if(f.exists()){ String read=read(f); out=new FileOutputStream(f); writeReaded(read); } else { out=new FileOutputStream(f); } } catch (IOException e) { e.printStackTrace(); } } public synchronized void write(String s){ try { out.write(s.getBytes()); } catch (IOException e) { e.printStackTrace(); } } public void close(){ try { out.close(); } catch (IOException e) { e.printStackTrace(); } } private String read(File f) throws IOException{ FileInputStream fis=null; StringBuilder sb=new StringBuilder(); try{ fis=new FileInputStream(f); int read=0; while((read=fis.read())!=-1){ sb.append((char)read); } } finally{ if(fis!=null){ fis.close(); } } return sb.toString(); } private void writeReaded(String data) throws IOException{ byte [] b=data.getBytes(); out.write(b); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д