반응형

* C# 프로그램 재시작 예제...

 

메인 화면

 

전체 소스 코드

Form1.cs

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.Runtime.InteropServices;

namespace CSharp_ProgramReStart
{
    public partial class Form1 : Form
    {

        #region INI 파일 사용을 위해 API 선언...

        [DllImport("KERNEL32.DLL")]
        private static extern bool WritePrivateProfileString(string lpAppName, string lpKeyName, string lpString, string lpFileName);

        [DllImport("KERNEL32.DLL")]
        private static extern uint GetPrivateProfileInt(string lpAppName, string lpKeyName, int nDefault, string lpFileName);

        [DllImport("kernel32.dll")]
        static extern uint GetPrivateProfileString(string lpAppName, string lpKeyName, string lpDefault, StringBuilder lpReturnedString, int nSize, string lpFileName);

        #endregion

        string strINIPath = Application.ExecutablePath.Substring(0, Application.ExecutablePath.LastIndexOf('\\')) + "\\INI";
        int iCount = 0;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //INI File 만들기...
            CreateIni("ReStart");

            //INI File Load...
            label2.Text = getIni("Restart_Info", "restart", "0", strINIPath + "\\Restart.ini");
            iCount = Convert.ToInt32(label2.Text);
        }


        private void button1_Click(object sender, EventArgs e)
        {
            iCount += 1;
            setIni("Restart_Info", "restart", iCount.ToString(), strINIPath + "\\Restart.ini");

            Application.Exit();
            //프로그램 다시 시작 하기... 1초 후
            System.Threading.Thread.Sleep(1000);
            //1번째 방법...
            //Application.Restart();
            //2번째 방법...
            System.Diagnostics.Process.Start(Application.ExecutablePath);
        }


        #region 사용자 정의 함수...

        //INIFile 읽어오기...
        private string getIni(string IpAppName, string IpKeyName, string lpDefalut, string filePath)
        {
            string inifile = filePath;    //Path + File

            try
            {
                StringBuilder result = new StringBuilder(255);
                GetPrivateProfileString(IpAppName, IpKeyName, lpDefalut, result, result.Capacity, inifile);

                return result.ToString();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
                return "실패";
            }
        }

        //INIFile 쓰기...
        private Boolean setIni(string IpAppName, string IpKeyName, string IpValue, string filePath)
        {
            try
            {
                string inifile = filePath;  //Path + File
                WritePrivateProfileString(IpAppName, IpKeyName, IpValue, inifile);
                return true;
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
                return false;
            }
        }

        //INIFile 만들기...
        private Boolean CreateIni(string strFileName)
        {
            try
            {
                string strCheckFolder = "";

                strCheckFolder = Application.ExecutablePath.Substring(0, Application.ExecutablePath.LastIndexOf('\\'));
                strCheckFolder += "\\INI";
                if (!System.IO.Directory.Exists(strCheckFolder))
                {
                    System.IO.Directory.CreateDirectory(strCheckFolder);

                }

                strCheckFolder += "\\" + strFileName + ".ini";
                if (!System.IO.File.Exists(strCheckFolder))
                {
                    using (System.IO.StreamWriter sw = new System.IO.StreamWriter(strCheckFolder, true, Encoding.GetEncoding(949)))
                    {
                        sw.Write("\r\n");
                        sw.Flush();
                        sw.Close();
                    }

                }

            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message.ToString());
                return false;
            }
            return true;
        }


        #endregion

    }
}

 

* 예제 결과 

 

 

 

 

https://kdsoft-zeros.tistory.com/31

 

[C#] INI File Create & Read & Write

* INI 파일 예제... Form1.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System...

kdsoft-zeros.tistory.com

 

반응형
반응형

* C# 다른 응용 프로그램 실행 및 종료 예제...

 

메인화면

전체 소스 코드

Form1.cs

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace CSharp_다른응용프로그램실행시키기
{
    public partial class Form1 : Form
    {
        System.Diagnostics.Process pc;

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            
            //exe 파일 만 열기...
            ofd.Filter = "EXE File (*.exe) | *.exe";

            if (ofd.ShowDialog() == DialogResult.OK)
            {
                label1.Text = ofd.FileName;
            }
            
        }

        private void button2_Click(object sender, EventArgs e)
        {
            //파일이 없다면...
            if (!System.IO.File.Exists(label1.Text)) return;

            //다른 응용 프로그램 실행 시키기...
            pc = System.Diagnostics.Process.Start(label1.Text);
        }

        private void button3_Click(object sender, EventArgs e)
        {
            if (pc == null) return;

            //실행 시킨 프로그램 죽이기...
            pc.Kill();
        }
    }
}

* 예제 결과

 

다른 응용 프로그램 실행 결과 화면

 

반응형
반응형

* C# 파일 사용 가능 여부 체크 예제...

 

메인 화면

 

전체 소스 코드

Form1.cs

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace CSharp_FileIsUse
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //파일 선택...
            OpenFileDialog ofd = new OpenFileDialog();

            if (ofd.ShowDialog() == DialogResult.OK)
            {
                //선택된 파일 표시...
                label1.Text = ofd.FileName;
            }

        }

        private void button2_Click(object sender, EventArgs e)
        {
            //파일 사용 유무...
            string strErr = "";


            if (FileIsUse(label1.Text, ref strErr))
            {
                label2.Text = "사용 가능한 파일 입니다.";
            }
            else
            {
                label2.Text = "파일 사용중.., " + strErr ;
            }


        }

        private bool FileIsUse(string strFilePath, ref string strErr)
        {

            try
            {
                using (System.IO.FileStream fs = new System.IO.FileStream(strFilePath, 
                                                                          System.IO.FileMode.Open, 
                                                                          System.IO.FileAccess.Read, 
                                                                          System.IO.FileShare.Read))
                {
                    //파일 닫기...
                    fs.Close();
                }
            }
            catch (Exception ex)
            {
                strErr = ex.Message.ToString();
                return false;
            }


            return true;
        }

    }
}

 

* 예제 결과

 

 

반응형
반응형

* C# XML File Write & Read 예제...

 

메인 화면

전체 소스 코드

Form1.cs

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace CSharp_XMLFile
{
    public partial class Form1 : Form
    {
        string strLocalFolder = Application.ExecutablePath.Substring(0, Application.ExecutablePath.LastIndexOf('\\'));
        string strXmlFile = "\\XMLText.xml";

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //파일이 존재 하면 삭제 하고 다시...
            if(System.IO.File.Exists(strLocalFolder + strXmlFile ))
            {
                System.IO.File.Delete(strLocalFolder + strXmlFile );
            }

            //XML Create
            System.Xml.XmlDocument xdDoc = new System.Xml.XmlDocument();
            System.Xml.XmlNode xnRoot = xdDoc.CreateElement("테스트");

            System.Xml.XmlNode xnTmp = xdDoc.CreateElement("XMLFileEx");
            xnTmp.InnerText = "XML Test";

            //상위 노드에 xnTmp 노드를 추가 테스트 -> XMLFileEx 관계
            xnRoot.AppendChild(xnTmp);

            //CheckBox 저장
            System.Xml.XmlNode xnCheckBox = xdDoc.CreateElement("ProgramCheckBox");
            System.Xml.XmlAttribute xaCheck1 = xdDoc.CreateAttribute("CheckBox1");
            System.Xml.XmlAttribute xaCheck2 = xdDoc.CreateAttribute("CheckBox2");
            System.Xml.XmlAttribute xaCheck3 = xdDoc.CreateAttribute("CheckBox3");

            xaCheck1.Value = checkBox1.Checked.ToString();
            xaCheck2.Value = checkBox2.Checked.ToString();
            xaCheck3.Value = checkBox3.Checked.ToString();

            //xnCheckBox 노드에 속성 추가
            xnCheckBox.Attributes.Append(xaCheck1);
            xnCheckBox.Attributes.Append(xaCheck2);
            xnCheckBox.Attributes.Append(xaCheck3);


            //라디오 버튼 저장
            System.Xml.XmlNode xnRadio = xdDoc.CreateElement("ProgramRadio");
            System.Xml.XmlAttribute xaRadio1 = xdDoc.CreateAttribute("Radio1");
            System.Xml.XmlAttribute xaRadio2 = xdDoc.CreateAttribute("Radio2");
            System.Xml.XmlAttribute xaRadio3 = xdDoc.CreateAttribute("Radio3");

            xaRadio1.Value = radioButton1.Checked.ToString();
            xaRadio2.Value = radioButton2.Checked.ToString();
            xaRadio3.Value = radioButton3.Checked.ToString();

            //XnRadio 노드에 속성 추가
            xnRadio.Attributes.Append(xaRadio1);
            xnRadio.Attributes.Append(xaRadio2);
            xnRadio.Attributes.Append(xaRadio3);
            

            xnRoot.AppendChild(xnRadio);
            xnRoot.AppendChild(xnCheckBox);

            //XML 저장
            xdDoc.AppendChild(xnRoot);
            xdDoc.Save(strLocalFolder + strXmlFile);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            //XML Read

            //파일이 존재 하지 않으면...
            if (!System.IO.File.Exists(strLocalFolder + strXmlFile)) return;

            textBox1.Text = "";

            System.Xml.XmlDocument xdDoc = new System.Xml.XmlDocument();
            //XML 파일 로드...
            xdDoc.Load(strLocalFolder + strXmlFile);

            //테스트 노드 의 하위 노드들 읽기...
            foreach (System.Xml.XmlNode xn in xdDoc.ChildNodes )
            {
                textBox1.Text +="RootNode = " + xn.Name + System.Environment.NewLine ;
                textBox1.Text += "하위 노드"+ System.Environment.NewLine;
                //하위 노드... Root 노드에 대한
                foreach (System.Xml.XmlNode xx in xn)
                {
                    //XMLFileEx
                    //ProgramCheckBox
                    //ProgramRadio
                    if(xx.Name == "XMLFileEx")
                    {
                        textBox1.Text += "RootNode ->" + xx.Name + System.Environment.NewLine;
                        textBox1.Text += "           " + xx.InnerText  + System.Environment.NewLine;
                    }
                    else if (xx.Name == "ProgramCheckBox")
                    {
                        textBox1.Text += "RootNode ->" + xx.Name + System.Environment.NewLine;
                        textBox1.Text += "           CheckBox1 = " + xx.Attributes[0].Value.ToString() + System.Environment.NewLine;
                        textBox1.Text += "           CheckBox2 = " + xx.Attributes[1].Value.ToString() + System.Environment.NewLine;
                        textBox1.Text += "           CheckBox3 = " + xx.Attributes[2].Value.ToString() + System.Environment.NewLine;
                    }
                    else
                    {
                        textBox1.Text += "RootNode ->" + xx.Name + System.Environment.NewLine;
                        textBox1.Text += "           Radio1 = " + xx.Attributes[0].Value.ToString() + System.Environment.NewLine;
                        textBox1.Text += "           Radio2 = " + xx.Attributes[1].Value.ToString() + System.Environment.NewLine;
                        textBox1.Text += "           Radio3 = " + xx.Attributes[2].Value.ToString() + System.Environment.NewLine;
                    }

                }
            }

        }
    }
}

 

 

 

* 예제 결과

 

- 파일 저장 위치 및 파일 내용

파일 저장 위치

 

아래의 그림은 XML 파일 만들기 버튼 클릭 이후 메모장으로 XML 파일 열어본 결과

파일 내용
결과 화면

 

 

반응형
반응형

* 동적으로 DLL 로드 하여 그 안에 포함된 Form 과 클래스 함수 사용 예제...

 

시작 하기에 앞서 테스트 DLL 만들기...

 

그대로 ClassLibrary1 을 사용 하여 만들어서 DLL 안에 내용은 아래의 그림과 같이

폼 하나 클래스 하나를 만들어 보았습니다. 클래스 안에는 테스트 하는 함수 하나를 만들었습니다.

이제 테스트 DLL 도 만들었고 준비도 다 되었으니 동적으로 DLL 을 로드 하여 저 안에 있는 클래스 함수

와 폼을 사용 해 보도록 하겠습니다.

 

테스트 DLL 위치는 위와 같이 그냥 C:\\ 에 놔두었는데 위치는 사용자 맘대로 두어도 괜찮겠습니다.

나중에 소스코드에서 DLL 로드 위치를 사용자가 Dll 이 있는 위치로 지정 하면 되겠습니다.

 

메인화면...

전체 소스 코드

Form1.cs

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace CSharp_동적Dll
{
    public partial class Form1 : Form
    {
        System.Reflection.Assembly ab;

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();

            //DLL 파일만 열수 있게끔...
            ofd.Filter = "Dll File (*.dll) | *.dll";

            if (ofd.ShowDialog() == DialogResult.OK)
            {
                //선택된 dll 파일 표시...
                label1.Text = ofd.FileName;

                //동적 dll 로드
                ab = System.Reflection.Assembly.LoadFile("C:\\ClassLibrary1.dll");
            }

        }

        private void button2_Click(object sender, EventArgs e)
        {
        	//파일이 존재 하지 않으면...
            if (!System.IO.File.Exists(label1.Text)) return;
            //form
            if (ab != null)
            {
                Type[] tp = ab.GetExportedTypes();

                if (tp.Length > 0)
                {
                    foreach (Type t in tp)
                    {
                        //Form 이름 Form1
                        if (t.Name == "Form1")
                        {
                            //객체화 
                            object ob = Activator.CreateInstance(t);
                            //폼 객체로 변환
                            Form f = ob as Form;
                            f.Show();
                        }
                    }
                }

            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            //파일이 존재 하지 않으면...
            if (!System.IO.File.Exists(label1.Text)) return;
            //class
            if (ab != null)
            {
                Type[] tp = ab.GetExportedTypes();

                if (tp.Length > 0)
                {
                    foreach (Type t in tp)
                    {
                        //class 이름
                        if (t.Name == "Class1")
                        {
                            //클래스 함수 얻어 오기...
                            System.Reflection.MethodInfo mt = t.GetMethod("Test");
                            //객체화 
                            object ob = Activator.CreateInstance(t);

                            //MethodInfo 인보크 (객체화 한 클래스, 함수 전달 인자)
                            //vReturn : 함수 결과값 리턴값...
                            var vReturn = mt.Invoke(ob, new object[] { 299, 300 });
                            
                            //함수 결과값...
                            MessageBox.Show(vReturn.ToString());

                        }
                    }
                }
            }
        }
    }
}

 

* 폼 불러오기

* 클래스 함수 불러오기

 

* 예제 결과 화면

 

폼 불러오기 결과 화면

 

클래스 함수 불러오기 결과 화면

 

반응형
반응형

* 폴더 복사 예제...

 

메인 화면

전체 소스 코드

Form1.cs

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace CSharp_FolderCopy
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //원본 폴더 열기...
            FolderBrowserDialog fbd = new FolderBrowserDialog();

            if (fbd.ShowDialog() == DialogResult.OK)
            {
                txtOriginFolder.Text = fbd.SelectedPath;
            }

        }

        private void button2_Click(object sender, EventArgs e)
        {
            //대상 폴더 열기...
            FolderBrowserDialog fbd = new FolderBrowserDialog();

            if (fbd.ShowDialog() == DialogResult.OK)
            {
                txtCopyFolder .Text = fbd.SelectedPath;
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            //폴더 복사...

            //원본 폴더 또는 복사 대상 폴더를 선택 하지 않았을 경우
            if (txtOriginFolder.Text == "" || txtCopyFolder.Text == "")
            {
                MessageBox.Show("원본 폴더 또는 복사 대상 폴더를 선택해 주세요.", "확 인", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                return;
            }

            button3.Text = "폴더 복사 중...";
            button3.Refresh();

            if (FolderCopy(txtOriginFolder.Text, txtCopyFolder.Text))
            {
                MessageBox.Show("폴더 복사가 완료 되었습니다.", "확 인", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
            }
            else
            {
                MessageBox.Show("폴더 복사가 실패 하였습니다.", "확 인", MessageBoxButtons.OK, MessageBoxIcon.Error );
            }

            button3.Text ="폴더 복사";
        }
        
        //파일 복사 함수
        private bool FileCopy(string strOriginFile, string strCopyFile)
        {
            System.IO.FileInfo fi = new System.IO.FileInfo(strOriginFile);
            long iSize = 0;
            long iTotalSize = fi.Length;
            //1024 버퍼 사이즈 임의로...
            byte[] bBuf = new byte[1024];

            //동일 파일이 존재하면 삭제 하고 다시하기 위해...
            if (System.IO.File.Exists(strCopyFile))
            {
                System.IO.File.Delete(strCopyFile);
            }

            //원본 파일 열기...
            System.IO.FileStream fsIn = new System.IO.FileStream(strOriginFile, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read);
            //대상 파일 만들기...
            System.IO.FileStream fsOut = new System.IO.FileStream(strCopyFile, System.IO.FileMode.Create, System.IO.FileAccess.Write);

            while (iSize < iTotalSize)
            {
                try
                {
                    int iLen = fsIn.Read(bBuf, 0, bBuf.Length);
                    iSize += iLen;
                    fsOut.Write(bBuf, 0, iLen);

                }
                catch (Exception ex)
                {
                    //파일 연결 해제...
                    fsOut.Flush();
                    fsOut.Close();
                    fsIn.Close();

                    //에러시 삭제...
                    if (System.IO.File.Exists(strCopyFile))
                    {
                        System.IO.File.Delete(strCopyFile);
                    }
                    return false;
                }

            }
            //파일 연결 해제...
            fsOut.Flush();
            fsOut.Close();
            fsIn.Close();

            return true;
        }

    
        private bool FolderCopy(string strOriginFolder, string strCopyFolder)
        {
            //폴더가 없으면 만듬...
            if (!System.IO.Directory.Exists(strCopyFolder))
            {
                System.IO.Directory.CreateDirectory(strCopyFolder);
            }

            //파일 목록 불러오기...
            string[] files = System.IO.Directory.GetFiles(strOriginFolder);
            //폴더 목록 불러오기...
            string[] folders = System.IO.Directory.GetDirectories(strOriginFolder);

            foreach (string file in files)
            {
                string name = System.IO.Path.GetFileName(file);
                string dest = System.IO.Path.Combine(strCopyFolder, name);
                //파일 복사 부분 넣기...
                FileCopy(file, dest);
            }

            // foreach 안에서 재귀 함수를 통해서 폴더 복사 및 파일 복사 진행 완료  
            foreach (string folder in folders)
            {
                string name = System.IO.Path.GetFileName(folder);
                string dest = System.IO.Path.Combine(strCopyFolder, name);
                FolderCopy(folder, dest);
            }


            return true;
        }

        

    }
}

폴더 복사 함수
파일 복사 함수

* 예제 결과

 

결과 화면

 

 

위 그림들은 테스트 결과 이미지들 입니다. 실제 복사가 정상적으로 이루어 졌는지 복사 하면서 잃게 된 용량은 없는지

 

* 참조 게시글

 

https://kdsoft-zeros.tistory.com/49?category=846221

 

[C#] File Copy (파일 복사 예제)

* 파일 복사 예제 전체 소스 코드 Form1.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text;..

kdsoft-zeros.tistory.com

https://kdsoft-zeros.tistory.com/39?category=846221

 

[C#] 폴더 및 파일, 드라이브 사이즈 (Size) 구하기

* 폴더 및 파일, 드라이브 목록 및 사이즈 구하기 예제 File Open 버튼 : 파일 대화 상자가 뜨게 되며, 해당 파일 선택 시 위 그림과 같이 파일의 위치 와 사이즈가 표시 됩니다. 다만 사이즈 표시는 기본 Byte..

kdsoft-zeros.tistory.com

 

반응형
반응형

* 파일 MD5 체크섬 예제...

 

메인화면

전체 소스 코드

Form1.cs

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.Security.Cryptography;
using System.IO;

namespace CSharp_CheckSumFile
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();

            //텍스트파일만 열기...
            //ofd.Filter = "TXTFile(*.txt)|*.txt";


            if(ofd.ShowDialog() == DialogResult.OK)
            {
                //파일 내용을 byte 배열로 얻어 오기...
                byte[] btAscii = File.ReadAllBytes(ofd.FileName);
                byte[] btHash = MD5.Create().ComputeHash(btAscii);

                lblSourcePath.Text = ofd.FileName;
                textBox1.Text = BitConverter.ToString(btHash).Replace("-", "").ToLower();

                if (textBox2.Text != "")
                {
                    if (textBox1.Text == textBox2.Text)
                    {
                        lbl.Text = "체크섬이 같습니다.";
                    }
                    else
                    {
                        lbl.Text = "체크섬이 다릅니다.";
                    }
                }
            }

        }

        private void button2_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();

            //텍스트파일만 열기...
            //ofd.Filter = "TXTFile(*.txt)|*.txt";

            if (ofd.ShowDialog() == DialogResult.OK)
            {
                //파일 내용을 byte 배열로 얻어 오기...
                byte[] btAscii = File.ReadAllBytes(ofd.FileName);
                byte[] btHash = MD5.Create().ComputeHash(btAscii);

                lblDestPath.Text = ofd.FileName;
                textBox2.Text = BitConverter.ToString(btHash).Replace("-", "").ToLower();

                if (textBox1.Text != "")
                {
                    if (textBox1.Text == textBox2.Text)
                    {
                        lbl.Text = "체크섬이 같습니다.";
                    }
                    else
                    {
                        lbl.Text = "체크섬이 다릅니다.";
                    }
                }
            }
        }

    }
}

 

* 예제 결과

 

위 그림은 파일 안에 내용이 같았을 경우 만약 다르다면...

 

위 그림과 같이 체크섬이 다르게 표시 됩니다.

반응형
반응형

* 로그 파일 남기기 예제 ...

 

메인화면

위 그림과 같이 리스트뷰 Columns 붉은 테두리 안에 있는 ... 버튼을 클릭하여 ColumnHeader 컬렉션 편집기를 

열어 멤버를 추가 해 줍니다.

첫번째 열은 No. 에 해당하며 Log 갯수를 표시 할 Column

두번째 열은 로그 내용에 해당하며 로그 파일안에 내용을 표시할 Column

 

전체 소스 코드

Form1.cs

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace CSharp_Log
{
    public partial class Form1 : Form
    {
       
        public Form1()
        {
            InitializeComponent();

            listView1.View = View.Details;
            listView1.FullRowSelect = true;
            listView1.GridLines = true;

            //2. 로그 남기기...
            Log_Info("Log 프로그램 예제를 시작 합니다.");
        }
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            //2. 로그 남기기...
            Log_Info("Log 프로그램 예제를 종료 합니다."); 
        }

        //1. 로그 함수 작성...
        public  bool Log_Info(string strMsg)
        {
            try
            {

                string strCheckFolder = "";
                string strFileName = "";
                //현재 EXE 파일가 위치 하고 있는 폴더를 가져옴.
                string strLocal = Application.ExecutablePath.Substring(0, Application.ExecutablePath.LastIndexOf("\\"));

                //로그 폴더가 없으면 생성 
                strCheckFolder = strLocal + "\\Log";
                if (!System.IO.Directory.Exists(strCheckFolder))
                {
                    System.IO.Directory.CreateDirectory(strCheckFolder);
                }


                strFileName = strCheckFolder + "\\" + DateTime.Now.ToString("yyyyMMdd") + ".txt";

                System.IO.StreamWriter FileWriter = new System.IO.StreamWriter(strFileName, true);
                FileWriter.Write(DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + " => " + strMsg + "\r\n");
                FileWriter.Flush();
                FileWriter.Close();
            }
            catch 
            {
                return false;
            }

            return true;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //2. 로그 남기기...
            Log_Info("로그 남기기 버튼을 클릭 하였습니다.");
        }

        private void button2_Click(object sender, EventArgs e)
        {
             string strLocal = Application.ExecutablePath.Substring(0, Application.ExecutablePath.LastIndexOf("\\"));

            OpenFileDialog ofd = new OpenFileDialog();
            //텍스트 파일만 불러오기...
            ofd.Filter = "TXT 파일(*.txt) | *.txt";
            //파일대화상자 시작시 기본 폴더 지정으로 지정된 폴더로 바로 띄우기
            ofd.InitialDirectory = strLocal + "\\Log";

            if (ofd.ShowDialog() == DialogResult.OK)
            {
                listView1.Items.Clear();

                string strFileName = "";
                strFileName = ofd.FileName;
                
                if (!System.IO.File.Exists(strFileName))
                {
                    MessageBox.Show("해당 파일이 없거나 선택된 파일이 없습니다.", "확 인", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    return;
                }
                else
                {
                    
                    string[] strValue =System.IO. File.ReadAllLines(strFileName);

                    for (int iCount = 0; iCount < strValue.Length; iCount++)
                    {
                        ListViewItem lvi = new ListViewItem();
                        lvi.Text = (iCount + 1).ToString();
                        lvi.SubItems.Add(strValue[iCount]);

                        listView1.Items.Add(lvi);
                    }
                    
                }
            }

        }
    }
}

* 예제 결과

 

결과 화면

 

 

 

[C#] File Create & Delete & Read & Write 예제

 

[C#] File Create & Delete & Read & Write 예제

* C# 파일 예제 Form1.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Wind..

kdsoft-zeros.tistory.com

 

반응형

+ Recent posts