본문 바로가기

C#

C#- Log File Manager 라이브러리를 만들자 !

반응형

[C#] 실행경로, 시작경로, 현제경로를 가져오는 방법

 

 

1. Application.StartupPath

 

- 현재 application이 존재하는 경로

- winform 인 경우에만 사용가능

- 레지스트리 관계없이 실제 실행 파일

- Application.ExcutablePath 와 동일

- string filePath = Application.StartupPaht + @"testFile.txt";

 

 

 

2. System.Environment.CurrentDirectory

 

- 현재 작업 실행되는 경로

- winform 이외의 개발 환경에서도 사용가능

- winform 에서는 "C:/Windows/System32" 경로가 나옴 ( svchost.exe 를 통해 서비스가 등록 되기 때문 )

- System.IO.Directory.GetCurrentDirectory() 와 동일

 

[winform의 경우]

1) Application.StartupPath 를 사용

2) string path = System.Reflection.Assembly.GetExecutingAssembly().Location;

    path = System.IO.Path.GetDirectoryName(path);

 

 

 

3. AppDomain.CurrentDomain.BaseDirectory

 

- 현재 application이 실행되는 경로

- WPF에서 사용

 

 



출처: https://rocabilly.tistory.com/114 [프로그램이 좋다]

 

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BabyCarrot.Tools
{
    public static class Application // 실행 경로 값을 가져오는 프로퍼티 ! 
    {
        public static string Root // 프로퍼티
        {

            get {
                string root = AppDomain.CurrentDomain.BaseDirectory; //실행경로 ?  
                return root;
                }
        }
    }
}
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BabyCarrot.Tools
{
    public class LogManager //
    {
        private string _path;

        //파일 리소스를 사용할때 사용가능한지 확인하고 사용하고 빠르게 놔줘야한다.
        //로그를 작성할려면 작성하는 파일을 생성하거나 파일이 있으면 로그를 생성 
       
        public LogManager(string path)
        {
            _path = path;
            _SetLogPath();
        }
        public LogManager() : this(Path.Combine(Application.Root, "Path"))//들어오는 값이 없는 로그의 경우 그냥 경로를 넣어준다? //IO.Path.Combine ->기존 경로에 추가 string변수를 추가해준다는 느낌
        { 
        }
        //로그 파일은 하루에 하나씩 생성을 할껀데 현재 이제 로그 메니저가 생성될 당시에 파일 네임을 생성 파일이 없으면 생성 /있으면 추가 
        private void _SetLogPath() 
        {
            if (!System.IO.Directory.Exists(_path))
            {
                System.IO.Directory.CreateDirectory(_path);
            }
            string logFile = DateTime.Now.ToString("yyyyMMdd") + ".txt";
            _path = Path.Combine(_path, logFile); 
            // 원래 기존 경로에다가 logFile 경로를 합쳐준다.
        }

        public void WriteLine(string data)
        {
            try
            {
                using (StreamWriter writer = new StreamWriter(_path, true))
                {
                    writer.WriteLine(DateTime.Now.ToString("yyyyMMdd HH:mm:ss\t") + data);
                }
            }
            catch (Exception ex)
            {

                throw;
            }
                
        }

        public void Write(string data)
        {
            try
            {
                using (StreamWriter writer = new StreamWriter(_path, true))
                {
                    writer.Write(DateTime.Now.ToString("yyyyMMdd HH:mm:ss\t") + data);
                }
            }
            catch (Exception ex)
            {

                throw;
            }
            
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using BabyCarrot.Tools; //참조로 연결해줘야한다.

namespace BabyCarrotTest
{
    class Program
    {
        static void Main(string[] args)
        {
            LogManager log = new LogManager();
            log.WriteLine("[Begin Processing]-------");

            for (int i = 0; i < 10; i++)
            {
                log.WriteLine("Processing :" + i);
                //Do
                System.Threading.Thread.Sleep(500);
                log.WriteLine("Done :" + i);
            }
            log.WriteLine("[End Processing]-------");

        }
    }
}

반응형