Дозапись в файл с новой строки с указанием текущего времени - C#

Узнай цену своей работы

Формулировка задачи:

написал программу , которая с помощью двух потоков делает запись в файл. с разными интервалами времени.
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(" дргуая ошибка на ввод - вывод ");
            }
        }
    }
}
во время работа программы : если открываешь файл, то видишь статическую картинку на момент открытия, что записалось например PetrAlexAlexPetrAlexAlex закрыл , подождал, открыл PetrAlexAlexPetrAlexAlexPetrAlexAlexPetrAlexPetrAlexAlexPetrAlexPetrAlexAlexPetrAlexAlexPetrAlexAlexPetrAlexPetrAlexAlex PetrAlexAlex а как сделать так , чтобы каждую запись сделать отдельной строкой с указанием времени ( чтобы понять, что это было записано вовремя - такое-то ) и еще у меня вся работа с файлом внутри блокировки. как это можно минимизировать ? подскажите пожалуйста.

Решение задачи: «Дозапись в файл с новой строки с указанием текущего времени»

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);
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4 из 5
Похожие ответы