반응형

* 파일 및 폴더 감시 예제...

 

메인화면

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;

//FileSystemWatcher Filter 를 쓰기 위해 선언...
using System.IO;

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

        private void button2_Click(object sender, EventArgs e)
        {
            //폴더 및 모든 파일 감시....
            FolderBrowserDialog fbd = new FolderBrowserDialog();

            if (fbd.ShowDialog() == DialogResult.OK)
            {
                fileSystemWatcher1.Path = fbd.SelectedPath;
                label3.Text = fbd.SelectedPath;
                //모든 파일 감시 ...
                //Ex) *.txt 모든 텍스트 파일 감시...
                fileSystemWatcher1.Filter = "*.*";
                fileSystemWatcher1.NotifyFilter = NotifyFilters.DirectoryName | NotifyFilters.Size | NotifyFilters.FileName;
                
            }
        }


        private void fileSystemWatcher1_Created(object sender, FileSystemEventArgs e)
        {
            //파일 및 폴더가 생성 되면 이벤트 발생...
            label5.Text = e.FullPath + ", " + e.Name + " Create Complete.";
        }

        private void fileSystemWatcher1_Deleted(object sender, FileSystemEventArgs e)
        {
            //파일 및 폴더가 삭제 되면 이벤트 발생...
            label5.Text = e.FullPath + ", " + e.Name + " Delete Complete.";
        }

        private void fileSystemWatcher1_Renamed(object sender, RenamedEventArgs e)
        {
            //파일 및 폴더가 이름이 바뀌게 되면 이벤트 발생...
            label5.Text = e.FullPath + ", " + e.Name + " Change Complete";
        }

        private void fileSystemWatcher1_Changed(object sender, FileSystemEventArgs e)
        {
            label5.Text = e.FullPath + ", " + e.Name + " Change Complete";
        }
      
    }
}

 

* 예제 결과

 - 파일 크기가 변경 되거나 수정 되었을 경우

 

위와 같이 txt 파일이 7kb 이며 안에 내용이 수정 되었을 때 이벤트 발생

 

 - 폴더가 생성 되거나 삭제 되었을 경우

 

반응형

'C# Programming' 카테고리의 다른 글

[C#] File CheckSum 예제 (MD5 Checksum)  (0) 2019.10.16
[C#] Log File - 로그 작성 예제  (0) 2019.10.14
[C#] File Copy (파일 복사 예제)  (0) 2019.10.08
[C#] 프로그램 중복 실행 방지  (0) 2019.10.06
[C#] Delay 함수  (0) 2019.10.04
반응형

* 파일 복사 예제

 

메인 화면

전체 소스 코드

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_FileCopy
{
    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)
            {
                label3.Text = ofd.FileName;
            }

        }

        private void button2_Click(object sender, EventArgs e)
        {
            string strDestFolder = "C:\\FileCopy\\DEST1";
            System.IO.FileInfo fi = new System.IO.FileInfo(label3.Text);
            //fi.Name = > 파일이름 가져 오기 즉 복사할려는 폴더안에 원본 파일 이름과 같이 복사...

            System.IO.File.Copy(label3.Text, strDestFolder + "\\" + fi.Name);
            label4.Text = strDestFolder + "\\" + fi.Name + "  복사 완료";
 
        }

//==============================================================================================================================================
        //두번째 방법
        private void button3_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();

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

        private void button4_Click(object sender, EventArgs e)
        {
            string strDestFolder = "C:\\FileCopy\\DEST2";
            System.IO.FileInfo fi = new System.IO.FileInfo(label5.Text);
			
            //버퍼 크기 
            int iBufferSize = 1024;
            long lSize = 0;
            //총 파일 크기 얻기
            long lTotalSize = fi.Length;
            //버퍼 크기만큼 바이트 배열 선언
            byte[] bTmp = new byte[iBufferSize];

            //프로그래스바 셋팅
            pbValue.Minimum = 0;
            pbValue.Maximum = (int)lTotalSize;

            System.IO.FileStream fsRead = new System.IO.FileStream(label5.Text, System.IO.FileMode.Open);
            System.IO.FileStream fsWrite = new System.IO.FileStream(strDestFolder + "\\" + fi.Name, System.IO.FileMode.Create );

            while (lSize < lTotalSize)
            {
                int iLen = fsRead.Read(bTmp, 0, bTmp.Length);
                lSize += iLen;
                fsWrite.Write(bTmp, 0, iLen);

                //진행 상태
                pbValue.Value = (int)lSize;
            }

            //파일 연결 해제...
            pbValue.Value  = pbValue.Maximum  ;
            fsWrite.Flush();
            fsWrite.Close();
            fsRead.Close();

            label7.Text = strDestFolder + "\\" + fi.Name + "  복사 완료";

        }
    }
}

 

* 첫번째 방법 부분 소스 코드 및 결과

 

 

* 두번째 방법 부분 소스 코드 및 결과

 

프로그래바 구현으로 진행 상태 까지 나타내기

 

 

 

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

 

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

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

kdsoft-zeros.tistory.com

 

[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

 

반응형
반응형

* 프로그램 중복 실행 방지 예제

 

1. Visual Studio 를 켜고 메뉴에서 파일 -> 새로 만들기 -> Project 를 선택

   C# Windows Forms 응용 프로그램 열어 줍니다.

 

2. 아래의 그림과 같이 오른쪽 솔루션 탐색기에서 Program.cs 파일을 더블 클릭 하여 소스를 열어 줍니다.

3. Program.cs 파일 Main() 함수 안에 중복 코드 구현

 

            //이미 프로그램이 실행 중 일때...
            System.Diagnostics.Process[] processes = null;
            string strCurrentProcess = System.Diagnostics.Process.GetCurrentProcess().ProcessName.ToUpper();
            processes = System.Diagnostics.Process.GetProcessesByName(strCurrentProcess);
            if (processes.Length > 1)
            {
                MessageBox.Show(string.Format("'{0}' 프로그램이 이미 실행 중입니다.", System.Diagnostics.Process.GetCurrentProcess().ProcessName));
                return;
            }

또는 Form1.cs 안에서 구현 가능 합니다.

 

            //이미 프로그램이 실행 중 일때...
            System.Diagnostics.Process[] processes = null;
            string strCurrentProcess = System.Diagnostics.Process.GetCurrentProcess().ProcessName.ToUpper();
            processes = System.Diagnostics.Process.GetProcessesByName(strCurrentProcess);
            if (processes.Length > 1)
            {
                MessageBox.Show(string.Format("'{0}' 프로그램이 이미 실행 중입니다.", System.Diagnostics.Process.GetCurrentProcess().ProcessName));
                Application.Exit();
            }

다만 둘 차이가 Program.cs 안에서는 return 으로 끝나지만 Form1.cs 안에서는 Application.Exit() 로 끝난다는 점 입니다.

Program.cs 안에서는 보시는 바와 같이 메인 함수 안에서 아직 어플리케이션이 시작 전에 있기 때문에 그렇고

Form1.cs 안에서는 이미 어플리케이션이 실행 되었기 때문에 그렇습니다.

 

4. EXE 파일이 빌드된 폴더로 이동 하여 EXE 파일을 마구 클릭 해 봅니다.

아래는 제가 예제로 만든 예제 위치 이며 각기 다를 수 있습니다.

-> C:\바탕화면\CSharp_ProgramOverlap\CSharp_ProgramOverlap\bin\Debug

반응형
반응형

* 지연(Delay) 함수 예제

 

메인화면

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_Delay
{
    public partial class Form1 : Form
    {
        //지연 시간 잴 변수...
        DateTime dtDelayStart;

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            dtDelayStart = DateTime.Now;

            //지연 함수 사용...
            //5초간 지연
            DelaySystem(5000);
            //System.Threading.Thread.Sleep(5000);

            //지연 시간 구하기...
            TimeSpan ts = DateTime.Now - dtDelayStart;
            lblTime.Text = ts.Seconds.ToString();

        }

        private void button2_Click(object sender, EventArgs e)
        {
            lbl.Text = "지연 시간 중 버튼 Click...";
        }

        //지연 함수...
        private void DelaySystem(int MS)
        {
            /* 함수명 : DelaySystem
             * 1000ms = 1초
             * 전달인자 : 얼마나 지연시킬것인가에 대한 변수
             * */
            DateTime dtAfter = DateTime.Now;
            TimeSpan dtDuration = new TimeSpan(0, 0, 0, 0, MS);
            DateTime dtThis = dtAfter.Add(dtDuration);
            while (dtThis >= dtAfter)
            {
                //DoEvent () 를 사용 해서 지연 시간 동안
                //버튼 클릭 이벤트 및 다른 윈도우 이벤트를 받을 수 있게끔 하는 역할
                //없으면 지연 동안 다른 이벤트를 받지 못함...
                System.Windows.Forms.Application.DoEvents();
                //현재 시간 얻어 오기...
                dtAfter = DateTime.Now;
            }
            
        }

        

    }
}

 

위 소스 예제를 보면 DelaySystem 함수 안 While 문 에 Application.DoEvents() 함수가 있습니다.

DoEvents() 함수 가 있고 없고 차이는 예제를 따라 하면서 주석 처리를 하시면 확연한 결과를 보실 수 있습니다.

주석에서 설명 드렸듯 윈도우의 다른 이벤트를 받을 수 있고 없고 인데 딜레이 함수 만드는 이유는

타이밍을 늦게 잡기 위해 딜레이 함수 밑에 코드 구현 구문을 조금 지연 시킨 뒤 실행 하고 싶으실 때

그럼 System.Threading.Thread.Sleep() 으로 하면 되지 않나 싶지만 이 또한 딜레이 함수에 DoEvents() 가 없는

결과와 같습니다. 

 

하지만 DoEvents() 함수의 남발한 사용 및 사용 위치에 따라 상상하지 못한 결과를 얻으실 수도 있습니다.

 

* 예제 결과

 

지연함수 진행 중일때 누른 버튼 클릭

말씀 드렸듯 지연함수는 그대로 돌고 있으며 다른 버튼을 클릭 했을 때의 이미지 입니다. DoEvents() 가 없이 저 버튼을

클릭 하였다면 5초뒤에 이벤트가 실행되는 현상을 보실 수 있습니다.

 

결과 화면

 

반응형
반응형

* 폴더 및 파일, 드라이브 목록 및 사이즈 구하기 예제

 

메인 화면

File Open 버튼 : 파일 대화 상자가 뜨게 되며, 해당 파일 선택 시 위 그림과 같이 파일의 위치 와 사이즈가

                      표시 됩니다. 다만 사이즈 표시는 기본 Byte 로 리턴 되며 이것을 KB 또는 MB 로 바꾸기

                      위한 작업을 필요 하다면 해줄 필요가 있습니다.

                      Ex) 위 그림에서 파일 사이즈를 변환 해 본다면...

                          1024 로 한번 나누게 되면 KB -> 10722 KB

                          KB 용량을 다시 1024 로 나누게 되면 10.4 MB 가 되겠습니다.

                      

파일 대화 상자

Folder Open 버튼 : 폴더 대화 상자가 뜨게 되며, 해당 폴더 선택 시 메인화면을 보듯이 폴더의 위치 와 사이즈가

                          표시 됩니다. 다만 사이즈 표시는 기본 Byte 로 리턴 되며 이것을 KB 또는 MB 로 바꾸기

                          위한 작업을 필요 하다면 해줄 필요가 있습니다.

                          File Open에서 설명 햇듯이 1024 한번 나누면 KB 두번 나누면 MB 로 변환 됨.

 

폴더 대화 상자

 

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.IO;

namespace CSharp_FFSize
{
    public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();

            //드라이브 구하기...
            DriveInfo[] dList = DriveInfo.GetDrives();

            for (int iCount = 0; iCount < dList.Length; iCount++)
            {
                //에러 나는 아이템은 추가 X ...
                try
                {
                    //드라이브 목록 및 이름, 사이즈...
                    ListViewItem lvi = new ListViewItem();
                    lvi.Text = dList[iCount].Name.ToString() + " 드라이브";
                    lvi.SubItems.Add(dList[iCount].TotalSize.ToString());
                    lvi.SubItems.Add(dList[iCount].TotalFreeSpace.ToString());

                    lvMain.Items.Add(lvi);
                }
                catch { }
            }

        }

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

            //파일 열기...
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                lblFilePath.Text = ofd.FileName;
                lblSize.Text = FileSize(ofd.FileName).ToString();
                /*
                 * 위 소스를 풀어서 하면은...
                 * 
                 * long lFileSize = FileSize(ofd.FileName);
                 * lblSize.Text = lFileSize.ToString();
                 * 
                 * 이렇게 구현 해도 무방 함.
                 */
            }

        }

        private void button2_Click(object sender, EventArgs e)
        {
            //Folder Open
            FolderBrowserDialog fbd = new FolderBrowserDialog();

            if (fbd.ShowDialog() == DialogResult.OK)
            {
                lblFolderPath.Text = fbd.SelectedPath ;
                lblFolderSize.Text = FolderSize(new DirectoryInfo (fbd.SelectedPath)).ToString();
                /*
                 * 위 소스를 풀어서 하면은...
                 * 
                 * DirectoryInfo d = new DirectoryInfo(fbd.SelectedPath);
                 * long lSize = FolderSize(d);
                 * lblFolderSize.Text = lSize.ToString();
                 * 
                 * 이렇게 구현 해도 무방 함.
                 */
            }
        }

        private long FileSize(string strPath)
        {
            if (strPath == "") return 0;
            FileInfo fi = new FileInfo(strPath);
            if (fi == null) return 0;
            return fi.Length;
        }

        private long FolderSize(DirectoryInfo d)
        {
            long size = 0;
            // 파일 사이즈.
            FileInfo[] fis = d.GetFiles();
            foreach (FileInfo fi in fis)
            {
                size += fi.Length;
            }
            // 하위 디렉토리 사이즈.
            DirectoryInfo[] dis = d.GetDirectories();
            foreach (DirectoryInfo di in dis)
            {
                size += FolderSize(di);
            }
            return size;
        }

        

    }
}

 

* 위 소스에 보면 FolderSize => 마지막 구문은 재귀호출하여 하위 디렉토리가 있으면 들어가서

                                         파일 사이즈 를 리턴 하게 됩니다.

 

함수 안에서 함수 자기자신을 호출하는 방식을 재귀호출이라고 합니다.

이러한 형태의 구문을 가지고 있는 함수를 재귀 함수라고 불리기도 합니다.

반응형
반응형

* 윈도우 레지스트리를 이용 하여 윈도우 시작 시 프로그램 자동 실행을 만들어 보겠습니다.

 

메인화면

윈도우 시작 버튼을 클릭 하면 아래의 이미지와 같이 레지스트리에 등록 된 것을 확인 할 수 있습니다.

-> 시작 -> 실행 -> regedit 를 입력 하여 레지스트리 에디터에 접근 할 수 있음.

윈도우 삭제 버튼은 등록된 레지스트리를 삭제 하는 기능.

 

 

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 Microsoft.Win32;

namespace CSharp_WindowsStart_Program
{
    public partial class Form1 : Form
    {
        string strAppName = "TestWindowsStart";

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            using (RegistryKey rk = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", true))
            {
                try
                {
                    //레지스트리 등록...
                    if (rk.GetValue(strAppName) == null)
                    {
                        rk.SetValue(strAppName, Application.ExecutablePath.ToString());
                    }

                    //레지스트리 닫기...
                    rk.Close();
                }
                catch (Exception ex)
                {
                    MessageBox.Show("오류: " + ex.Message.ToString());
                }

                txtMsg.Text += strAppName + " 프로그램을 레지스트리에 등록 하였습니다." + System.Environment.NewLine ;
            }


        }

        private void button2_Click(object sender, EventArgs e)
        {
            using (RegistryKey rk = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", true))
            {

                try
                {
                    //레지스트리 삭제
                    if (rk.GetValue(strAppName) != null)
                    {
                        rk.DeleteValue(strAppName, false);
                    }


                    //레지스트리 닫기...
                    rk.Close();
                }
                catch(Exception ex)
                {
                    MessageBox.Show("오류: " + ex.Message.ToString());
                }

                txtMsg.Text += strAppName + " 프로그램을 레지스트리에 삭제 하였습니다." + System.Environment.NewLine;
            }

        }
    }
}

 

* 예제 결과 화면

 

결과 화면

 

[C#] 레지스트리(Registry) Create , Read, Write, Delete

 

[C#] 레지스트리(Registry) Create , Read, Write, Delete

* 윈도우 레지스트리에 읽고 쓰고 만들고 지우기 예제 Form1.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text;..

kdsoft-zeros.tistory.com

[VBNET] 레지스트리(Registry) Create & Delete & Read & Write

 

[VBNET] 레지스트리(Registry) Create & Delete & Read & Write

* 윈도우 레지스트리에 읽고 쓰고 만들고 지우기 예제 Form1.vb Imports Microsoft.Win32 Public Class Form1 Dim strAppName As String = "RegistryTest" Private Sub Form1_Load(ByVal sender As System.Object..

kdsoft-zeros.tistory.com

 

반응형
반응형

* 엑셀 파일 쓰고 읽기 예제...

 

위 그림과 같이 프로젝트에 참조를 추가 해 줍니다.

 

참조가 추가 되었으면 이제 메인화면을 만들어 봅니다.

 

메인화면

소스 구현을 하기에 앞서 미리 엑셀 파일을 열어 D:\통합 문서.xls 로 샘플로 하나 저장 해 놓았습니다.

샘플로 파일 하나 만들고 위치는 어디에 있던 상관 없습니다.

 

Form.cs

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

using Excel = Microsoft.Office.Interop.Excel;
using System.IO;

namespace CSharp_ExcelFile
{
    public partial class Form1 : Form
    {
        Excel.Application ExcelApp = null;
        Excel.Workbook wb = null;
        Excel.Worksheet ws = null;

        public Form1()
        {
            InitializeComponent();
        }
        private void button2_Click(object sender, EventArgs e)
        {
            //Read

            //파일이 없다면...
            if (!File.Exists("C:\\Test.xls"))
            {
                textBox1.Text += "파일이 존재 하지 않습니다." + System.Environment.NewLine;
                return;
            }

            try
            {
                ExcelApp = new Excel.Application();
                wb = ExcelApp.Workbooks.Open("C:\\Test.xls",
                                              0,
                                              true,
                                              5,
                                              "",
                                              "",
                                              true,
                                              Excel.XlPlatform.xlWindows,
                                              "\t",
                                              false,
                                              false,
                                              0,
                                              true,
                                              1,
                                              0);
                ws = wb.Worksheets["Sheet1"] as Excel.Worksheet;
                
                Excel.Range rg = ws.Cells[1, 1] as Excel.Range ;
                Excel.Range rg2 = ws.Cells[1, 2] as Excel.Range;
                Excel.Range rg3 = ws.Cells[1, 3] as Excel.Range;
                Excel.Range rg4 = ws.Cells[1, 4] as Excel.Range;

                //범위 지정... 
                Excel.Range rgTest = ws.get_Range("A1", "A4");
                System.Array ayTest = (System.Array)rgTest.Cells.Value2 ;
                string[] strArray = ConvertToStringArray(ayTest);


                //텍스트 박스에 디스플레이...
                textBox1.Text += "A1: " + rg.Value2.ToString() + System.Environment.NewLine;
                textBox1.Text += "A2: " + rg2.Value2.ToString() + System.Environment.NewLine;
                textBox1.Text += "A3: " + rg3.Value2.ToString() + System.Environment.NewLine;
                textBox1.Text += "A4: " + rg4.Value2.ToString() + System.Environment.NewLine;
                textBox1.Text += "===========================" + System.Environment.NewLine;
                textBox1.Text += "Excel File Read..." + System.Environment.NewLine; ;
                textBox1.Text += "===========================" + System.Environment.NewLine;

                //범위 결과 표시...
                for (int iCount = 0; iCount < strArray.Length; iCount++)
                {
                    //범위 테스트
                    textBox1.Text += "A"+ (iCount+1).ToString()  +": " + strArray[iCount] + System.Environment.NewLine;
                }

                //파일 닫기... 
                wb.Close(false, Type.Missing, Type.Missing);
                wb = null;
                ExcelApp.Quit();
                
            }
            catch (Exception ex)
            {
                //객체들 메모리 해제
                ReleaseExcelObject(ws);
                ReleaseExcelObject(wb);
                ReleaseExcelObject(ExcelApp);

                //가비지 컬렉션 직접 실행...
                GC.Collect();

            }
            finally
            {
                //객체들 메모리 해제
                ReleaseExcelObject(ws);
                ReleaseExcelObject(wb);
                ReleaseExcelObject(ExcelApp);

                //가비지 컬렉션 직접 실행...
                GC.Collect();
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //Write

            //파일이 존재 한다면..삭제 하고..
            if (File.Exists("C:\\Test.xls"))
            {
                File.Delete("C:\\Test.xls");
            }

            try
            {
               
                ExcelApp = new Excel.Application();
                wb = ExcelApp.Workbooks.Open("D:\\통합 문서.xls", 
                                              0,
                                              true,
                                              5, 
                                              "", 
                                              "", 
                                              true, 
                                              Excel.XlPlatform.xlWindows, 
                                              "\t", 
                                              false, 
                                              false, 
                                              0, 
                                              true, 
                                              1, 
                                              0);
                ws = wb.Worksheets["Sheet1"] as Excel.Worksheet;


                //엑셀 시트 인덱스 번호는 0,0 부터 시작 하는 것이 아니라 1,1 A1 부터 시작 함. 0,0 으로 시작하면 오류...
                //시트에 값 쓰기...
                ws.Cells[1, 1] = "1";
                ws.Cells[1, 2] = "12";
                ws.Cells[1, 3] = "123";
                ws.Cells[1, 4] = "1234";

                ws.Cells[2, 1] = "Test1"; //A2
                ws.Cells[3, 1] = "Test12"; //A3
                ws.Cells[4, 1] = "Test123"; //A4

                //포뮬러 셋팅하기
                //Excel.Range rg = ws.Cells[1,1] as Excel.Range;
                //rg.Formula = "=SUM($A$1:$A$100)";
                //string strTmp = rg.Formula.ToString();


                //텍스트 박스에 디스플레이...
                textBox1.Text += "A1: 1"  + System.Environment.NewLine ;
                textBox1.Text += "A2: 12"  + System.Environment.NewLine;
                textBox1.Text += "A3: 123"  + System.Environment.NewLine;
                textBox1.Text += "A4: 1234"  + System.Environment.NewLine;
                textBox1.Text += "===========================" + System.Environment.NewLine;
                textBox1.Text += "Excel File Write..." + System.Environment.NewLine; ;
                textBox1.Text += "===========================" + System.Environment.NewLine;

                //다른 이름으로 저장하기...
                //wb.Save(); // => 오픈한 파일 그대로 저장...
                wb.SaveAs("C:\\Test.xls", 
                          Excel.XlFileFormat.xlWorkbookNormal, 
                          Type.Missing , 
                          Type.Missing, 
                          Type.Missing, 
                          Type.Missing, 
                          Excel.XlSaveAsAccessMode.xlNoChange,
                          Type.Missing,
                          Type.Missing,
                          Type.Missing,
                          Type.Missing,
                          Type.Missing);


                //파일 닫기... 
                wb.Close(false, Type.Missing, Type.Missing);
                wb = null;
                ExcelApp.Quit();
            }
            catch (Exception ex)
            {
                //객체들 메모리 해제
                ReleaseExcelObject(ws);
                ReleaseExcelObject(wb);
                ReleaseExcelObject(ExcelApp);
                GC.Collect();
            }
            finally
            {
                //객체들 메모리 해제
                ReleaseExcelObject(ws);
                ReleaseExcelObject(wb);
                ReleaseExcelObject(ExcelApp);
                GC.Collect();
            }
            
        }

        private void ReleaseExcelObject(object obj)
        {
            try
            {
                if (obj != null)
                {
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
                    obj = null;
                }
            }
            catch (Exception ex)
            {
                obj = null;
                throw ex;
            }
            finally
            {
                GC.Collect();
            }
        }

        private string[] ConvertToStringArray(System.Array ayValues)
        {

            string[] strArray = new string[ayValues.Length];

            for (int i = 1; i <= ayValues.Length; i++) 
             {
                 if (ayValues.GetValue(i, 1) == null)
                 {
                     strArray[i - 1] = "";
                 }
                 else
                 {
                     strArray[i - 1] = (string)ayValues.GetValue(i, 1).ToString();
                 }
             }
             return strArray;
        }

    }
}

 

* 예제 결과 화면

 

결과 화면

 

[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

 

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

 

[C#] Excel File Print (엑셀 파일 프린트 하기)

* C# Excel File Print (엑셀 파일 프린트 하기) 예제... - 인쇄할 엑셀 파일 추가 하기... 프로젝트 클릭 -> 마우스 오른쪽 클릭 -> 추가 -> 기존 항목 선택 위 그림과 같이 모든 파일 선택 합니다. 기본 Visu..

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;

using System.IO;

namespace CSharp_FileEx
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            string strCheckFolder = "";

            //TEST 폴더 만들기...
            strCheckFolder = Application.ExecutablePath.Substring(0, Application.ExecutablePath.LastIndexOf('\\'));
            strCheckFolder += "\\TEST";
            if (!System.IO.Directory.Exists(strCheckFolder))
            {
                System.IO.Directory.CreateDirectory(strCheckFolder);

            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //Create
            try
            {
                string strCheckFolder = "";

                strCheckFolder = Application.ExecutablePath.Substring(0, Application.ExecutablePath.LastIndexOf('\\'));
                strCheckFolder += "\\TEST\\TEST.txt";
                
                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();
                    }

                }

                FileInfo fi = new FileInfo(strCheckFolder);

                lblCreate.Text = "*Message: " + fi.Name + " 파일을 만들었습니다.";
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message.ToString());
                
            }
            
        }

        private void button4_Click(object sender, EventArgs e)
        {
            //Delete
            string strCheckFolder = "";

            strCheckFolder = Application.ExecutablePath.Substring(0, Application.ExecutablePath.LastIndexOf('\\'));
            strCheckFolder += "\\TEST\\TEST.txt";

            //파일이 있다면...
            if (File.Exists(strCheckFolder))
            {
                FileInfo fi = new FileInfo(strCheckFolder);

                lblDelete.Text = "*Message: " + fi.Name + " 파일을 삭제 했습니다.";
                File.Delete(strCheckFolder);
                
            }
            else
            {
                lblDelete.Text = "해당 파일이 없습니다.";
            }

        }

        private void button2_Click(object sender, EventArgs e)
        {
            //Read
            string strCheckFolder = "";

            strCheckFolder = Application.ExecutablePath.Substring(0, Application.ExecutablePath.LastIndexOf('\\'));
            strCheckFolder += "\\TEST\\TEST.ZerosKD";

            if (!File.Exists(strCheckFolder))
            {
                lblRead.Text = "해당 파일이 없습니다. File Read Fail.";
                return;
            }

          
            string[] strValue = File.ReadAllLines(strCheckFolder);

            for (int iCount = 0; iCount < strValue.Length; iCount++)
            {
                txtRead.Text += strValue[iCount] + System.Environment.NewLine ;
            }
            txtRead.Text += "File Read TEST" + "\r\n";
            FileInfo fi = new FileInfo(strCheckFolder);
            lblRead.Text = fi.Name + " File Read Complete.";

        }

        private void button3_Click(object sender, EventArgs e)
        {
            //Write
            try
            {
                string strCheckFolder = "";
                
                strCheckFolder = Application.ExecutablePath.Substring(0, Application.ExecutablePath.LastIndexOf('\\'));
                strCheckFolder += "\\TEST\\TEST.ZerosKD";

                //True : Append 기존 파일이 있을 경우 추가해서 쓴다. False : 기존 파일이 있을 경우 덮어쓴다.
                using (StreamWriter sw = new StreamWriter(strCheckFolder, true))
                {
                    sw.Write(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " => " + "File 예제..." + "\r\n");
                    sw.Write(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " => " + txtWrite.Text  + "\r\n");
                    sw.Write(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " => " + "============" + "\r\n");
                    sw.Write(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " => " + "File Write TEST" + "\r\n");
                    sw.Flush();
                    sw.Close();
                }

                FileInfo fi = new FileInfo(strCheckFolder);
                lblWriteFile.Text = fi.Name + " File Write Complete.";

            }
            catch (Exception ex)
            {
                System.Console.WriteLine(ex.Message.ToString());
                
            }
        }
    }
}

 

위 소스에서 보시는 거와 같이 파일 저장 시 확장자 명은 사용자가 정의 해서 사용 할 수 있습니다.

 

결과 화면

 

반응형

+ Recent posts