본문 바로가기
2_ 바삭바삭 프로그래밍/C# and Visual C++

[C#] 프로그램을 시작할때 (파일출력 프로토타입)

by 준환이형님_ 2013. 2. 14.


CDragFileOut.zip



국 끓일 때 다싯물 먼저 내는 밑작업 마냥, 코딩에서 프로토 타입으로 만들어지는 프로그램은 텍스트 파일(혹은 엑셀, MP3, 동영상 등)을 읽는 기능 부터 구현하게 되는 경우가 왕왕 생기지요. 오늘 포스팅에서는 [텍스트 파일을 드래그로 폼에 넣어, 내용을 콘솔에 출력하는 프로그램]을 만들어 보려고 합니다 

(음악 파일을 읽어 재생하는 기능 응용 예 :  http://topnanis.tistory.com/167 )






1. 솔루션탐색기 -> 응용프로그램 속성은 "콘솔 응용프로그램" 으로 바꾸어 Console.write("Hello, world");를 콘솔화면에서 확인 할 수 있도록 해주세요




2. 폼 속성 -> 이벤트추가 -> DragEnter와 DragDrop 두개 항목을 자동 추가 해서 코드를 넣어 주세요



3. 폼 속성 -> Allow Drop 는 True 로 변경




메소드는 마우스 드래그를 시작할 때(DragEnter), 드래그를 놓을 때(DragDrop), 처리(Parser) 세개 만으로 구성됩니다.

이 코드에는 폼과 콘솔을 스레드로 나누어 돌려주며, 텍스트 라인을 20줄씩 보여주게 됩니다.


using System;

using System.Windows.Forms;

using System.IO;

using System.Threading;


namespace WindowsFormsApplication1

{

    public partial class Form1 : Form

    {      

        public Form1()

        {

            InitializeComponent();

        }


        private void Form1_DragDrop(object sender, DragEventArgs e)

        {

            if (e.Data.GetDataPresent(DataFormats.FileDrop))

            {    

                string[] file = (string[])e.Data.GetData(DataFormats.FileDrop);


                foreach (string str in file)

                {

                    Console.WriteLine(str);


                    Thread thread = new Thread(() => Parser(str));


                    thread.Start();

                }

            }

        }


        private void Form1_DragEnter(object sender, DragEventArgs e)

        {

            if (e.Data.GetDataPresent(DataFormats.FileDrop))

            {

                e.Effect = DragDropEffects.Copy | DragDropEffects.Scroll;

            }

        }


        public void Parser(string path)

        {

            string strSaveFilePath = path;

        

            StreamReader SRead = new StreamReader(strSaveFilePath, System.Text.Encoding.Default /* .UTF8*/);


            string strFileLine = string.Empty;


            int page = 0;


            while ((strFileLine = SRead.ReadLine()) != null)

            {

                Console.WriteLine(strFileLine);


                //20줄씩 끊어서 보여줌

                if (page > 20)

                {

                    Console.ReadLine();

                    page = 0;

                }

                else page++;

            }

        }

    }

}