C\#간단 하고 실 용적 인 TXT 텍스트 작업 및 로그 프레임 워 크 설명 실현

머리말
먼저 이 항목 을 소개 합 니 다.이 항목 은 텍스트 쓰기 및 읽 기,로 그 를 지정 한 폴 더 나 기본 폴 더 에 기록 합 니 다.로그 수량 제어,단일 로그 크기 제어,약 정 된 매개 변 수 를 통 해 사용자 가 더 적은 코드 로 문 제 를 해결 할 수 있 도록 합 니 다.
1.텍스트 파일 읽 는 방법
사용:JIYUWU.TXT.TXThelper.ReadToString("파일 물리 경로")

public static string ReadToString(string path)
 {
  try
  {
  LogLock.EnterReadLock();
  StreamReader sr = new StreamReader(path, Encoding.UTF8);
  StringBuilder sb = new StringBuilder();
  string line;
  while ((line = sr.ReadLine()) != null)
  {
   sb.AppendLine(line.ToString());
  }
  sr.Close();
  sr.Dispose();
  return sb.ToString();
  }
  catch (IOException e)
  {
  Console.WriteLine(e.ToString());
  return null;
  }
  finally
  {
  LogLock.ExitReadLock();
  }
 }
구현 해석:
(1.작업 읽 기 를 방지 하기 위해 읽 기 자 물 쇠 를 추가 해 야 합 니 다.순서대로 읽 을 수 있 습 니 다.그렇지 않 으 면 점용 이상 이 발생 할 수 있 습 니 다.
(2.읽 기 흐름 StreamReader 를 만 듭 니 다.(주의:오류 가 발생 할 수 있 으 므 로 기본 값 을 Encoding.UTF 8 로 변경 하 십시오.)각 줄 을 순서대로 읽 습 니 다.
(3.자원 방출 완료 읽 기.자 물 쇠 를 풀다.
2.텍스트 파일 쓰기 방법
(1.텍스트 를 만 들 고 쓰기
사용:JIYUWU.TXT.TXThelper.CreateWrite("파일 물리 경로","텍스트 내용")

public static bool CreateWrite(string path, string context)
 {
  bool b = false;
  try
  {
  LogLock.EnterWriteLock();
  FileStream fs = new FileStream(path, FileMode.Create);
  //      
  byte[] data = System.Text.Encoding.Default.GetBytes(context);
  //    
  fs.Write(data, 0, data.Length);
  //     、   
  fs.Flush();
  fs.Close();
  return b;
  }
  catch (Exception ex)
  {
  Console.WriteLine(ex.ToString());
  return b;
  }
  finally
  {
  LogLock.ExitWriteLock();
  }
 }
(2.텍스트 파일 끝 에 추가 쓰기
사용:JIYUWU.TXT.TXThelper.WriteAppend("파일 물리 경로","텍스트 내용")

public static bool WriteAppend(string path, string context)
 {
  bool b = false;
  try
  {
  LogLock.EnterWriteLock();
  FileStream fs = new FileStream(path, FileMode.Append);
  StreamWriter sw = new StreamWriter(fs);
  //    
  sw.Write(context);
  //     
  sw.Flush();
  //   
  sw.Close();
  fs.Close();
  return b;
  }
  catch (Exception ex)
  {
  Console.WriteLine(ex.ToString());
  return b;
  }
  finally
  {
  LogLock.ExitWriteLock();
  }
 }
(3.줄 바 꿈 추가 또는 텍스트 생 성 자동 판단
사용:JIYUWU.TXT.TXThelper.CreateOrWriteAppendLine("파일 물리 경로","텍스트 내용")

public static bool CreateOrWriteAppendLine(string path, string context)
 {
  bool b = false;
  try
  {
  LogLock.EnterWriteLock();
  if (!File.Exists(path))
  {
   FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write);
   StreamWriter sw = new StreamWriter(fs);
   long fl = fs.Length;
   fs.Seek(fl, SeekOrigin.End);
   sw.WriteLine(context);
   sw.Flush();
   sw.Close();
   fs.Close();
   b = true;
  }
  else
  {
   FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Write);
   StreamWriter sw = new StreamWriter(fs);
   long fl = fs.Length;
   fs.Seek(fl, SeekOrigin.Begin);
   sw.WriteLine(context);
   sw.Flush();
   sw.Close();
   fs.Close();
   b = true;
  }
  return b;
  }
  catch (Exception ex)
  {
  Console.WriteLine(ex.ToString());
  return b;
  }
  finally
  {
  LogLock.ExitWriteLock();
  }
 }
구현 해석:
(1)다 중 작업 읽 기 를 방지 하기 위해 읽 기 자 물 쇠 를 추가 해 야 합 니 다.그렇지 않 으 면 점용 이상 이 발생 할 수 있 습 니 다.
(2)텍스트 스 트림 FileStream 을 만 들 고 스 트림 Writer 를 기록 하여 데 이 터 를 직접 기록 합 니 다.
(3)자원 방출 완료 읽 기.자 물 쇠 를 풀다.
3.로그 쓰기
사용:JIYUWU.TXT.TXThelper.WriteLog("텍스트 내용","단일 파일 크기(기본 1M 선택)","디 렉 터 리 아래 파일 개수(기본 20 개 선택)","출력 디 렉 터 리(기본 빈 파일 선택)")

public static void WriteLog(string content, int fileSize = 1, int fileCount = 20, string filePath = "")
 {
  try
  {
  if (!string.IsNullOrWhiteSpace(filePath))
  {
   logPath = filePath;
  }
  LogLock.EnterWriteLock();
  logPath = logPath.Replace("file:\\", "");//      webapi   
  string dataString = DateTime.Now.ToString("yyyy-MM-dd");
  string path = logPath + "\\MyLog";
  if (!Directory.Exists(path))
  {
   Directory.CreateDirectory(path);
   path += "\\";
   path += DateTime.Now.ToString("yyyy-MM-dd") + ".txt";
   FileStream fs = new FileStream(path, FileMode.Create);
   fs.Close();
  }
  else
  {
   int x = System.IO.Directory.GetFiles(path).Count();
   path += "\\";
   Dictionary<string, DateTime> fileCreateDate = new Dictionary<string, DateTime>();
   string[] filePathArr = Directory.GetFiles(path, "*.txt", SearchOption.TopDirectoryOnly);
   if (filePathArr.Length == 0)
   {
   string sourceFilePath = path;
   path += DateTime.Now.ToString("yyyy-MM-dd") + ".txt";
   FileStream fs = new FileStream(path, FileMode.Create);
   fs.Close();
   filePathArr = Directory.GetFiles(sourceFilePath, "*.txt", SearchOption.TopDirectoryOnly);
   }
   for (int i = 0; i < filePathArr.Length; i++)
   {
   FileInfo fi = new FileInfo(filePathArr[i]);
   fileCreateDate[filePathArr[i]] = fi.CreationTime;
   }
   fileCreateDate = fileCreateDate.OrderBy(f => f.Value).ToDictionary(f => f.Key, f => f.Value);
   FileInfo fileInfo = new FileInfo(fileCreateDate.Last().Key);
   if (fileInfo.Length < 1024 * 1024 * fileSize)
   {
   path = fileCreateDate.Last().Key;
   }
   else
   {
   path += DateTime.Now.ToString("yyyy-MM-dd") + ".txt";
   FileStream fs = new FileStream(path, FileMode.Create);
   fs.Close();
   }
   if (x > fileCount)
   {
   File.Delete(fileCreateDate.First().Key);
   }

  }
  FileStream fs2 = new FileStream(path, FileMode.Open, FileAccess.Write);
  StreamWriter sw = new StreamWriter(fs2);
  long fl = fs2.Length;
  fs2.Seek(fl, SeekOrigin.Begin);
  sw.WriteLine(DateTime.Now.ToString("hh:mm:ss") + "---> " + content);
  sw.Flush();
  sw.Close();
  fs2.Close();
  }
  catch (Exception ex)
  {
  Console.WriteLine(ex.ToString());
  }
  finally
  {
  LogLock.ExitWriteLock();
  }

 }
해석 실현(모든 기본 매개 변 수 를 예 로 들 어 설명):
(1.다 중 작업 을 방지 하기 위해 문서 에 기록 자 물 쇠 를 추가 합 니 다.그렇지 않 으 면 점용 이상 이 발생 할 수 있 습 니 다.
(2.파일 디 렉 터 리 가 존재 하 는 지 확인 하고 존재 하지 않 으 면 디 렉 터 리 를 만 들 고 로그 파일 을 만 듭 니 다.존재 하면 파일 의 수량 과 크기 를 판단 합 니 다.파일 크기 가 설정 한 값 이나 기본 값 을 초과 하면 텍스트 를 새로 만 듭 니 다.파일 의 수량 이 기본 값 이나 설정 값 을 초과 하면 최초의 파일 을 삭제 합 니 다.
(3.지정 한 파일 에 쓰기.
(4.자원 방출 완료.자 물 쇠 를 풀다.
프로젝트 프레임 워 크 는 여기까지 소개 하 겠 습 니 다.나중에 기능 을 확장 할 것 입 니 다.소스 주 소 는 더 이상 말 하지 않 겠 습 니 다.
4.567915.(예측 되 지 않 은 bug 가 존재 할 수 있 습 니 다.발생 한 문 제 는 저 에 게 피드백 해 주 셔 서 감사합니다.)
문제 집계:
bug 1:패키지 에서 txt 를 읽 으 면 오류 가 발생 할 수 있 습 니 다.읽 기 흐름 에서 기본 값 을 Encoding.UTF 8 로 바 꾸 면 될 것 같 습 니 다.
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기