이번 포스팅은 제가 C#을 사용하는 개발자로 일 하면서 자주 사용했던 파일 유무를 확인하는 방법에 대해 써보려 합니다.
Log나 Recipe 등 파일들의 유무를 확인하고 설정해야 하기 때문에 프로그램 실행 시 Load 부분에서 자주 사용했습니다.
.Net에서는 여러 방법으로 파일 존재 유무를 확인할 수 있는데요. 대표적으로 3가지 방법을 예시로 들어 설명하겠습니다.
| 방법 1 : File.Exists()
- C#에서 파일이 있는지 확인하는 가장 간단한 방법입니다. System.IO 네임스페이스의 File.Exists() 메서드를 사용하는 것인데 이 메서드는 파일 경로를 나타내는 문자열을 매개 변수로 사용하고 파일이 있는지 여부를 나타내는 bool 값을 반환합니다. 예시를 보시면 더 이해할 수 있습니다.
예시)
string filePath = "C:\\temp\\myfile.txt";
if (File.Exists(filePath))
{
Console.WriteLine("The file exists.");
}
else
{
Console.WriteLine("The file does not exist.");
}
- 예시 코드에서는 myfile.txt 파일이 C 드라이브의 temp 폴더 안에 있는지 확인하고 있으면 true를 없다면 false를 출력하여 확인할 수 있습니다.
| 방법 2 : FileInfo.Exists()
C#에 파일이 있는지 확인하는 또 다른 방법은 FileInfo 클래스의 Exists 속성을 사용하는 것입니다. 이 클래스는 또한 System.IO 네임스페이스의 일부이며 디스크의 파일을 나타냅니다.
예시)
string filePath = "C:\\temp\\myfile.txt";
FileInfo fileInfo = new FileInfo(filePath);
if (fileInfo.Exists)
{
Console.WriteLine("The file exists.");
}
else
{
Console.WriteLine("The file does not exist.");
}
- 위의 File.Exists()와 다른 점은 FileInfo 클래스 생성자로 객체를 만들어서 메서드를 사용해야 합니다.
객체로 생성된 fileInfo 클래스의 Exists 메서드로 파일이 존재하는지 확인할 수 있으며 이 또한 bool 값을 반환합니다.
| 방법 3 : Directory.GetFiles()
디렉터리에 여러 파일이 있는지 확인해야 하는 경우 System.IO 네임스페이스의 Directory.GetFiles() 메서드를 사용할 수 있습니다. 이 메서드는 지정된 패턴과 일치하는 파일 경로의 배열을 반환합니다.
다음은 Directory.GetFiles() 메서드를 사용하여 C:\temp 디렉터리에 .txt 파일이 있는지 확인하는 방법의 예입니다.
예시)
string[] filePaths = Directory.GetFiles("C:\\temp", "*.txt");
if (filePaths.Length > 0)
{
Console.WriteLine("One or more .txt files exist in the directory.");
}
else
{
Console.WriteLine("No .txt files exist in the directory.");
}
- Directory.GetFiles는 파일 경로를 배열로 반환하기 때문에 string[]으로 받아야 하며 길이가 0 이상이면 파일 경로가 존재한다는 뜻입니다. 위와 같이 GetFiles를 사용하면 C:\temp 디렉터리의 *.txt 패턴과 일치하는 파일 경로 배열을 가져옵니다.
이렇게 C#에서 파일 존재 유무를 확인하는 대표적인 방법 3가지를 알아봤습니다. 이보다 더 다양한 방법이 존재하지만 실제로 제가 자주 쓰는 방법을 소개했습니다. 간단하고 사용하기 쉬우며 상황에 따라 다른 방법을 사용하기도 합니다만 가장 중요한 것은 파일에 액세스 할 때 발생할 수 있는 예외 처리를 꼭! 하는 것이 좋습니다!
다음 포스팅으로 찾아오겠습니다 :)
감사합니다.
'C#' 카테고리의 다른 글
[C#] Bitmap.LockBits 메서드 (0) | 2023.09.25 |
---|---|
[C#] unsafe / fixed 키워드 (0) | 2023.09.25 |
[C#] record(레코드) 정의와 사용 (0) | 2023.09.24 |
[C#] delegate(대리자) 마스터하기 (1) (0) | 2023.07.17 |
[C#] BackgroundWorker 클래스 정리 (0) | 2023.04.24 |