Open-Closed Principle

[c#] 파일 찾기 및 파일 내용 읽기 (File Search) 본문

Programming/C#

[c#] 파일 찾기 및 파일 내용 읽기 (File Search)

대박플머 2014. 6. 2. 12:07

아!!!!!!

첫 포스팅은 c# 관련 글로 하는구나 ㅋㅋㅋㅋ

즐겁게 초대장을 박고 이제 시작함 해보자 ㅋㅋㅋ


첫 주제로 파일 찾기를 선택한 이유는 단 한가지도 

파일 입력, 출력은 가장 많이 사용하기 때문이다. (그래서 보통은 기본이라고들 하지)

그런데 똑똑한 MS형들은 대박인 함수를 만들어 두셨다. 


함수명 : Directory.GetFiles(String Path)

매개변수 : Path 찾고자하는 파일 위치

MSDN에서 제공하는 예제 코드 이다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
using System;
using System.IO;
using System.Collections;
 
public class RecursiveFileProcessor 
{
    public static void Main(string[] args) 
    {
        foreach(string path in args) 
        {
            if(File.Exists(path)){
                ProcessFile(path); 
            }               
            else if(Directory.Exists(path)){
                ProcessDirectory(path);
            }
            else{
                Console.WriteLine("{0} is not a valid file or directory.", path);
            }        
        }        
    }
 
    public static void ProcessDirectory(string targetDirectory){
        string [] fileEntries = Directory.GetFiles(targetDirectory); // A
 
        foreach(string fileName in fileEntries)
            ProcessFile(fileName);
        string [] subdirectoryEntries
                          = Directory.GetDirectories(targetDirectory);
        foreach(string subdirectory in subdirectoryEntries)
            ProcessDirectory(subdirectory);
    }
 
    public static void ProcessFile(string path) 
    {
        Console.WriteLine("Processed file '{0}'.", path);        
    }
}
 

소스를 간단히 설명하면

// A와 같이 파일 목록을 받아서 적절한 프로세스를 진행하면 된다



이건 간단하게 예제를 살펴본 것이고

이제 실전에서는 어떻게 사용하는 지 알아보도록 하겠다.

실전에서 파일의 내용을 읽어들여야 할 경우는

Log를 분석하거나, 타회사와 Interface를 하는 경우 txt파일로 하는 경우 일 것이다.

그렇다면 이렇게 하는 것이 과연 프로그래밍적으로 좋은 코딩일까?

그래서 MS 형님들은 더 멋있는 함수를 만들었다.

함수명 : File.ReadAllLines(String Path)

, File.ReadAllLines(String Path, Encoding encoding)

매개변수 : Path 말그대로 파일 경로 

, Encoding 말그대로 파일 인코딩형식이다.

예제 소스 이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using System;
using System.IO;
class Test
{
    public static void Main()
    {
        string path = @"c:\temp\MyTest.txt";
 
        if (!File.Exists(path))
        {
            string[] createText = { "Hello""And""Welcome" };
            File.WriteAllLines(path, createText);
        }
 
        string appendText = "This is extra text" + Environment.NewLine;
        File.AppendAllText(path, appendText);
 
        string[] readText = File.ReadAllLines(path); // A
 
        foreach (string s in readText)
        {
            Console.WriteLine(s);
        }
    }
}

// A 부분에서 파일의 내용을 라인별로 읽어 들인다.


이야~~~~~~~~~~~~~!!!!!

보기만해도 대박이다.

그냥 읽어 들여서 그냥 쓰기만 하면된다.

파일 Open, Close이런거 필요 없다. 걍 저거 쓰면 된다. ㅋㅋㅋ

C#을 하면서 느끼는 거지만 아주 잘 만들었다. 사용자의 편의를 잘 사용해서

디자인패턴 이야기도 가끔 하겠지만 이런 형태의 패턴을 아마도 Facade라고

하지 않을까 생각이 된다. 뭐 아니면 말고 ㅋㅋㅋ


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

[C#] 내부 클래스  (1) 2014.06.16
[C#] 소멸자 Finalize  (0) 2014.06.13
[C#] Delegate 사용법  (0) 2014.06.12
[C#]명령 프롬프트에서 컴파일 하기 CSC.exe  (0) 2014.06.11
[C#] Boxing과 Unboxing의 고찰  (0) 2014.06.11