C\#간단 하고 실 용적 인 TXT 텍스트 작업 및 로그 프레임 워 크 설명 실현
7741 단어 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 로 바 꾸 면 될 것 같 습 니 다.
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C#Task를 사용하여 비동기식 작업을 수행하는 방법라인이 완성된 후에 이 라인을 다시 시작할 수 없습니다.반대로 조인(Join)만 결합할 수 있습니다 (프로세스가 현재 라인을 막습니다). 임무는 조합할 수 있는 것이다. 연장을 사용하여 그것들을 한데 연결시키는 것이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.