SSISO Community

갤러리정

파일입출력 - CSharp

파일 & 디렉토리
- System.IO
- FileInfo
- DirectoryInfo
- FileSystemInfo
- 파일 및 디렉토리 조작 관련 클래스

 

인코딩
- 문자 코드를 컴퓨터가 이해가능한 0과 1의 바이너리 값을 가지는 연속적인 비트형태로 매핑시켜주는 작업
- ASCII : 7비트사용, 총 128문자 표현
- ISO-8859-1 : 8비트 사용, 서유럽 문자 집합, 기존 ASCII코드에 추가 문자 포함, 총 256문자 표현
- KSC 5601 : 한국 공업표준, 2바이트 완성형 한글 표현, ASCII 문자제외
- EUC-KR : ASCII문자 코드는 1바이트, 한글은 2바이트로 표현
- 유니코드 : 인간이 사용하는 모든 언어표현, 2바이트 사용, 총 65365개 문자표현
- UTF-8 : ASCII문자 코드는 1바이트, 다른 문자는 2바이트나 그 이상으로 표현(한글은 3바이트로 인코딩), 기본 사용 추세
- UTF-16 : 2바이트로 모든 문자 코드 표현

 

스트림
- C#에서의 모든 입출력
- 스트림을 통해 입출력되는 단위는 byte -> 스트림 내부에는 데이터 타입X -> 어떤 종류의 입출력장치나 파일도 쉽게 처리
- 프로그램상의 객체(데이터)는 데이터 타입이 있기 때문에 이런 바이트 단위와 변한하는 과정이 필요 -> 닷넷 스트림 관련 클래스
- System.IO : 스트림 관련 클래스

 

Stream 추상클래스
- 모든 스트림
- FileStream, MemoryStream, NetworkStream
- 입출력 장치에 관계없는 일관된 프로그래밍 지원

 

FileStream
- 파일에 들어있는 데이터를 바이트 배열로 읽고 쓰기 위한 기능 제공

 

Stream 관련 클래스
- 의미없이 연속된 바이트 데이터를 의미있는 타입 데이터로 바꾸는 기능 제공
- Reader / Writer
- StreamReader : 파일등의 입출력 장치에서 얻은 바이트들을 여러 인코딩을 통해서 의미있는 문자나 문자열로 해석(TextReader 구현)
- StreamWriter : 프로그램에서의 의미있는 문자나 문자열을 입출력 장치로 쓸수 있게 한다(TextWriter 구현)
- 개발자는 더이상 바이트 스트림에 대한 신경 안써도 됨 -> 스트림을 직접 다루지 않아도 된다.

 

FileStream.Flush
- 스트림에 대한 모든 버퍼를 지우고 버퍼링된 모든 데이터가 내부 장치에 저장되도록 한다.
- Close를 하기전에 적절히 사용

 

파일 메소드

- 파일에 텍스트 추가 : File.AppendText, FileInfo.AppendText

- 파일이름 변경, 이동 : File.Move,FileInfo.MoveTo

- 파일삭제 : File.Delete, FileInfo.Delete

- 파일복사 : File.Copy, FileInfo.CopyTo

- 파일 크기를 정보 : FileInfo.Length 

- 파일특성 가져옴 : File.GetAttributes 

- 파일의 특성 설정 : File.SetAttributes 

- 파일이 존재여부 체크 : File.Exists 

- 파일의 정규화된 경로를 검색 : Path.GetFullPath

- 파일 확장명을 검색 : Path.GetExtension 

- 경로에서 파일 이름 및 확장명을 검색 : Path.GetFileName 

- 파일 확장명을 변경 : Path.ChangeExtension 

 

* 파일 속성 이용 예제

using System;
using System.IO;

namespace CSharpStudy
{
    class  MainClass
    {
        [STAThread]
        static void Main(string[] args)
        {
            string path = @"C:\boot.ini";

 

            Console.WriteLine("------------- -FileInfo ------------------");

            FileInfo file = new FileInfo(path);


            if(file.Exists)     //파일이 해당경로에 존재하는지 여부 체크
            {
                Console.WriteLine("Attributes : {0}", file.Attributes);
                Console.WriteLine("File Name : {0}", file.Name);
                Console.WriteLine("File Ext : {0}", file.Extension);
                Console.WriteLine("File Size : {0}", file.Length);
                Console.WriteLine("Create time : {0}", file.CreationTime);
                Console.WriteLine("DirectoryName : {0}", file.DirectoryName);
                Console.WriteLine("Full Name: {0}", file.FullName);
                Console.WriteLine("Last AccessTime : {0}", file.LastAccessTime.ToString());
                Console.WriteLine("Last WriteTime : {0}", file.LastWriteTime.ToString());
            }
            else
            {
                Console.WriteLine("파일이 존재하지 않습니다.");
            }

 

            Console.WriteLine("\n");

            Console.WriteLine("-------------- DirectoryInfo ------------------");

            string dirPath = @"D:\Inetpub\wwwroot";
            DirectoryInfo dir  = new DirectoryInfo(dirPath);

 

                Console.WriteLine("Attributes : {0}", dir.Attributes);
                Console.WriteLine("Directory Name : {0}", dir.Name);
                Console.WriteLine("Parent : {0}", dir.Parent.Name);
                Console.WriteLine("Root : {0}", dir.Root.Name);
                Console.WriteLine("Create time : {0}", dir.CreationTime);
                Console.WriteLine("Full Name: {0}", dir.FullName);
                Console.WriteLine("Last AccessTime : {0}", dir.LastAccessTime.ToString());
                Console.WriteLine("Last WriteTime : {0}", dir.LastWriteTime.ToString());

        }
    }
}

 

*파일 메소드 이용예제

using System;
using System.IO;

namespace CSharpStudy
{
    class  MainClass
    {
        [STAThread]
        static void Main(string[] args)
        {
            string path = @"text.txt";
            FileInfo file = new FileInfo(path);
            bool flag = true;

            while(flag)
            {
                Console.WriteLine("=====================");
                Console.WriteLine(" 파일 처리");
                Console.WriteLine("=====================");
                Console.WriteLine("1. 파일생성");
                Console.WriteLine("2. 텍스트추가");
                Console.WriteLine("3. 파일 읽기");
                Console.WriteLine("4. 파일삭제");
                Console.WriteLine("5. 파일 복사");
                Console.WriteLine("6. 파일이동");
                Console.WriteLine("7. 종료");
                Console.Write("\n원하시는 작업 : ");

                string sel = Console.ReadLine();
                switch(sel)
                {
                    case "1":
                        CreateText(file);
                        break;
                    case "2":
                        AppendText(file);
                        break;
                    case "3":
                        ReadText(file);
                        break;
                    case "4":
                        DeleteFile(file);
                        break;
                    case "5":
                        CopyFile(file);
                        break;
                    case "6":
                        MoveFile(file);
                        break;
                    case "7":
                    default:
                        Console.WriteLine("프로그램을 종료합니다.");
                        flag = false;
                        break;
                }
            }
        }

        //파일생성
        public static void CreateText(FileInfo file)
        {
            StreamWriter writer = file.CreateText();
            //UTF-8로 인코딩된 텍스트를 쓰기 위해 파일을 만들거나 엽니다
            //file.CreateText(쓰기용으로 사용할 파일의 경로); -> 경로가 없으면  자기자신에게 실행

            writer.Close();
            Console.WriteLine("파일이 생성되었습니다\n\n");
        }

 

        //텍스트추가
        public static void AppendText(FileInfo file)
        {
            if(file.Exists)
            {
                Console.WriteLine("\n텍스트를 입력하세요(/p : 입력종료)");
                StreamWriter writer  = file.AppendText();
                //기존 파일에 UTF-8로 인코딩된 텍스트를 추가하는 StreamWriter를 만듬
                //file.AppendText(추가하고자하는 파일의 경로); ->경로가 없으면  자기자신에게 실행

                string inputString = Console.ReadLine();
                while(inputString != "/q")
                {  
                    writer.WriteLine(inputString);
                    inputString = Console.ReadLine();
                }

                writer.Close();
                Console.WriteLine("텍스트 추가가 완료 되었습니다.\n\n");
            }
            else
            {
                Console.WriteLine("파일이 존재하지 않습니다.");
            }
           
        }

 

        //파일읽기
        public static void ReadText(FileInfo file)
        {
            if(file.Exists)
            {  
                StreamReader reader = file.OpenText(); 

                //UTF-8로 인코딩된 기존 텍스트 파일을 읽기 용으로 엽니다

                Console.WriteLine(reader.ReadToEnd());
                Console.WriteLine("\n\n");
                reader.Close();
            }
            else
            {
                Console.WriteLine("파일이 존재하지 않습니다\n\n");
            }
        }

 

        //파일삭제
        public static void DeleteFile(FileInfo file)
        {
            if(file.Exists)
            {  
                file.Delete();
                Console.WriteLine("파일을 삭제하였습니다.");
            }
            else
            {
                Console.WriteLine("파일이 존재하지 않습니다\n\n");
            }
        }

 

        //파일복사
        public static void CopyFile(FileInfo file)
        {
            if(file.Exists)
            {  
                file.CopyTo("copy.txt", true);
                Console.WriteLine("파일을 복사하였습니다.");
            }
            else
            {
                Console.WriteLine("파일이 존재하지 않습니다\n\n");
            }
        }

 

        //파일이동
        public static void MoveFile(FileInfo file)
        {
            if(file.Exists)
            {  
                Console.Write("이동 경로 입력 : ");
                string dirPath = Console.ReadLine();
                file.MoveTo(dirPath + "\\move.txt");    //해당경로로 이름을 바꿔서 이동한다.
                Console.WriteLine("파일을 복사하였습니다.");
            }
            else
            {
                Console.WriteLine("파일이 존재하지 않습니다\n\n");
            }
        }

    }
}

885 view

4.0 stars