파일 작업 FileStream, Log

5249 단어
1. 파일을 읽고 쓰는 데 있어서 저급한 오류를 범했다. 평소에 코드를 복사하는 것이 습관이 되었다. 마치 컴퓨터를 많이 사용하면 붓을 많이 들고 글씨를 잊어버리는 것처럼 평소에 신경을 많이 써야 한다.
이 코드의 의도는 파일에 데이터를 쓰는 것입니다. 만약 원 파일이 존재하지 않는다면 먼저 새로 만듭니다.
실제로 System을 실행했습니다.IO.File.Create(filename); 시스템을 다시 실행합니다.IO.StreamWriter sr=new System.IO.StreamWriter (filename, true) 에서 오류가 발생합니다.
    The process cannot access the file 'C:\Documents\bigtext\1.txt' because it is being used by another process.
이유: System.IO.File.Create(filename) 반환 값은 FileStream입니다. 새로 만들기를 실행했지만 FileStream을 닫지 않았기 때문에 파일used by another process입니다.
        private static void write()
        {
            try
            {
                string filename = @"C:\Documents\bigtext\1.txt";
                if (!System.IO.File.Exists(filename))
                {
                    System.IO.File.Create(filename);
                }
                using (System.IO.StreamWriter sr=new System.IO.StreamWriter(filename,true))
                {
                    sr.WriteLine("test12");
                }
            }
            catch
            {

            }
        }

아래와 같이 수정하면 된다
        private static void write()
        {
            try
            {
                string filename = @"C:\Users\xiaochun-zhai\Documents\bigtext\1.txt";
                if (!System.IO.File.Exists(filename))
                {
                   System.IO.FileStream sr= System.IO.File.Create(filename);
                   sr.Close();
                }
                using (System.IO.StreamWriter sr=new System.IO.StreamWriter(filename,true))
                {
                    sr.WriteLine("test12");
                }
            }
            catch
            {

            }
        }

2. 사실상 코드 한 마디가 위의 방법을 대체할 수 있다. 상기 방법은 단지 System을 설명하기 위한 것이다.IO.File.Create 사용 시 주의해야 할 문제.
string filename = @"C:\Documents\bigtext\1.txt"; System.IO.File.AppendAllText(filename, "ceshi\r");
3. 아주 간단하게 로그를 쓰는 클래스
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace writefile
{
    public class WriteLog
    {
        public static string LogBasePath = @"C:\";
        private string logFileName = "Log.txt";
       
        private static object _locker = new object();
        private static WriteLog _instance;
        private WriteLog()
        {
        }

        public static WriteLog Instance
        {
            get
            {
                if (_instance == null)
                {
                    lock (_locker)
                    {
                        if (_instance == null)
                        {
                            _instance = new WriteLog();
                        }
                    }
                }
                return _instance;
            }
        }
        public void LogMessage(string message)
        {
            lock (_locker)
            {
                string fullPath = System.IO.Path.Combine(WriteLog.LogBasePath, logFileName);
                System.IO.File.AppendAllText(fullPath, message + Environment.NewLine);
            }
        } 
    }
}

호출:WriteLog.Instance.LogMessage("test");
설명: Environment.New Line은 줄 바꿈을 나타냅니다.
.

좋은 웹페이지 즐겨찾기