C# FileInfo 로 파일다루기(정보 취득, 파일 생성, 삭제..)

소개

.NET 및 C#의 FileInfo 클래스는 파일 처리에 관련된 기능을 제공합니다. 이 튜토리얼의 코드 샘플은 파일 크기, 생성 시간, 최종 업데이트, 읽기 전용 여부, 파일 존재 여부 등과 같은 클래스에서 제공하는 대부분의 기능을 다룹니다. 또한 C# 및 .NET을 사용하여 파일을 생성, 읽기, 이동, 대체 및 삭제하는 방법도 다룹니다.

FileInfo 생성하기

FileInfo 객체는 파일 이름과 전체 경로를 포함하는 문자열을 사용하는 기본 생성자를 이용하여 생성됩니다.

string fileName = @"D:\TestText.txt";;
FileInfo fi = new FileInfo(fileName);

FileInfo 속성

FileInfo 클래스는 파일 이름, 확장자, 디렉토리, 크기 및 파일 속성을 가져오기 위한 속성을 제공합니다.

파일 이름 가져오기

FileName 속성은 파일 경로의 일부가 아닌 파일 이름 부분만 반환합니다. 다음 코드 스니펫은 파일 이름을 반환합니다.

string justFileName = fi.Name;
Console.WriteLine("파일 이름: {0}", justFileName);

파일의 전체 경로 가져오기

FullName 속성은 파일 이름을 포함한 전체 파일 경로를 반환합니다. 다음 코드 스니펫은 전체 파일 경로를 반환합니다.

string fullFileName = fi.FullName;
Console.WriteLine("파일 경로: {0}", fullFileName);

파일 확장자 가져오기

Extension 속성은 파일의 확장자를 반환합니다. 다음 코드 스니펫은 파일의 확장자를 반환합니다.

string extn = fi.Extension;
Console.WriteLine("파일 확장자: {0}", extn);

파일의 디렉토리 이름 가져오기

DirectoryName 속성은 파일의 디렉토리 이름을 반환합니다. 다음 코드 스니펫은 파일의 디렉토리를 반환합니다.

string directoryName = fi.DirectoryName;
Console.WriteLine("디렉토리 이름: {0}", directoryName);

파일 존재 여부 확인

Exists 속성은 파일이 존재하는 경우 true를 반환합니다. 다음 코드 스니펫은 파일이 이미 존재하는 경우 true를 반환합니다.

bool exists = fi.Exists;

파일 크기 가져오기

Length 속성은 파일의 크기를 바이트 단위로 반환합니다. 다음 코드 스니펫은 파일의 크기를 반환합니다.

long size = fi.Length;
Console.WriteLine("파일 크기 (바이트): {0}", size);

파일이 읽기 전용인지 확인

IsReadOnly 속성은 파일이 읽기 전용인 경우 true를 반환합니다. 다음 코드 스니펫은 파일이 읽기 전용인 경우 true를 반환합니다.

bool IsReadOnly = fi.IsReadOnly;
Console.WriteLine("읽기 전용: {0}", IsReadOnly);

파일 생성 시간 가져오기

CreationTime 속성은 파일이 생성된 날짜와 시간을 반환합니다. 다음 코드 스니펫은 파일의 생성 시간을 반환합니다.

DateTime creationTime = fi.CreationTime;
Console.WriteLine("생성 시간: {0}", creationTime);

파일 최종 접근 시간 가져오기

LastAccessTime 속성은 파일이 마지막으로 접근한 날짜와 시간을 반환합니다. 다음 코드 스니펫은 파일의 마지막 접근 시간을 반환합니다.

DateTime accessTime = fi.LastAccessTime;
Console.WriteLine("마지막 접근 시간: {0}", accessTime);

파일 최종 업데이트 시간 가져오기

LastWriteTime 속성은 파일이 마지막으로 업데이트 또는 쓴 날짜와 시간을 반환합니다. 다음 코드 스니펫은 파일의 마지막 업데이트 시간을 반환합니다.

DateTime updatedTime = fi.LastWriteTime;
Console.WriteLine("마지막 업데이트 시간: {0}", updatedTime);

샘플코드

다음은 완전한 예제입니다.

// 전체 파일 이름
string fileName = @"D:\TestTextNew.txt";
FileInfo fi = new FileInfo(fileName);
// 새 파일 생성
using (FileStream fs = fi.Create())
{
    Byte[] txt = new UTF8Encoding(true).GetBytes("새 파일입니다.");
    fs.Write(txt, 0, txt.Length);
    Byte[] author = new UTF8Encoding(true).GetBytes("저자: 하로스튜디오");
    fs.Write(author, 0, author.Length);
}
// 파일 이름 가져오기
string justFileName = fi.Name; Console.WriteLine("파일 이름: {0}", justFileName);
// 전체 파일 경로 가져오기
string fullFileName = fi.FullName; Console.WriteLine("파일 경로: {0}", fullFileName);
// 파일 확장자 가져오기
string extn = fi.Extension; Console.WriteLine("파일 확장자: {0}", extn);
// 디렉토리 이름 가져오기
string directoryName = fi.DirectoryName; Console.WriteLine("디렉토리 이름: {0}", directoryName);
// 파일 존재 여부 확인
bool exists = fi.Exists;
Console.WriteLine("파일 존재 여부: {0}", exists);
if (fi.Exists)
{
    // 파일 크기 가져오기
    long size = fi.Length;
    Console.WriteLine("파일 크기 (바이트): {0}", size);
    // 파일 읽기 전용 여부 확인
    bool IsReadOnly = fi.IsReadOnly; Console.WriteLine("읽기 전용: {0}", IsReadOnly);
    // 생성 시간, 마지막 접근 시간, 마지막 업데이트 시간
    DateTime creationTime = fi.CreationTime;
    Console.WriteLine("생성 시간: {0}", creationTime);
    DateTime accessTime = fi.LastAccessTime;
    Console.WriteLine("마지막 접근 시간: {0}", accessTime);
    DateTime updatedTime = fi.LastWriteTime;
    Console.WriteLine("마지막 업데이트 시간: {0}", updatedTime);
}

위 작업으로 결과는 다음과 같습니다.

파일정보출력
파일정보출력

파일 생성 (Create a File)

파일을 생성하는 방법에는 두 가지 다른 방법이 있습니다. 이 문서에서는 “File.Create” 및 “File.CreateText” 메서드를 사용하여 파일을 생성하는 방법에 대해 설명하겠습니다.

File.Create

File.Create 메서드는 주어진 경로에 파일을 생성합니다. 파일 이름이 경로 없이 제공된 경우 파일은 현재 폴더에 생성됩니다.

다음 코드 스니펫은 Create 메서드를 사용하여 파일을 생성하고 FileStream 개체를 반환합니다. FileStream의 Write 메서드를 사용하여 파일에 텍스트를 작성할 수 있습니다.

string fileName = @"D:\TestText.txt";
FileInfo fi = new FileInfo(fileName);
try
{
	// 파일이 이미 존재하는지 확인합니다. 이미 존재한다면 삭제합니다.
	if (fi.Exists)
	{
		fi.Delete();
	}
	// 새 파일 생성
	using (FileStream fs = fi.Create())
	{
		Byte[] txt = new UTF8Encoding(true).GetBytes("새 파일입니다.");
		fs.Write(txt, 0, txt.Length);
		Byte[] author = new UTF8Encoding(true).GetBytes("저자: 하로스튜디오");
		fs.Write(author, 0, author.Length);
	}
	// 파일 내용을 콘솔에 작성합니다.
	using (StreamReader sr = File.OpenText(fileName))
	{
		string s = "";
		while ((s = sr.ReadLine()) != null)
		{
			Console.WriteLine(s);
		}
	}
}
catch (Exception Ex)
{
	Console.WriteLine(Ex.ToString());
}

FileInfo.CreateText

FileInfo.CreateText 메서드는 UTF-8로 인코딩된 텍스트를 작성하기 위해 파일을 생성하고 엽니다. 파일이 이미 존재하는 경우 이 메서드는 파일을 엽니다.

다음 코드 스니펫은 CreateText 메서드를 사용하여 파일을 생성하고 StreamWriter 개체를 반환합니다. SteamLine의 WriteLine 메서드를 사용하여 텍스트를 개체에 추가하고 파일에 작성할 수 있습니다.

string fileName = @"D:\TestText.txt";
FileInfo fi = new FileInfo(fileName);
try
{
	// 파일이 이미 존재하는지 확인합니다. 이미 존재한다면 삭제합니다.
	if (fi.Exists)
	{
		fi.Delete();
	}
	// 새 파일 생성
	using (StreamWriter sw = fi.CreateText())
	{
		sw.WriteLine("새 파일 생성: {0}", DateTime.Now.ToString());
		sw.WriteLine("저자: 하로스튜디오");
		sw.WriteLine("완료!");
	}
	// 파일 내용을 콘솔에 작성합니다.
	using (StreamReader sr = File.OpenText(fileName))
	{
		string s = "";
		while ((s = sr.ReadLine()) != null)
		{
			Console.WriteLine(s);
		}
	}
}
catch (Exception Ex)
{
	Console.WriteLine(Ex.ToString());
}
FileInfo.CreateText
FileInfo.CreateText

이렇게 두 가지 방법으로 파일을 생성할 수 있습니다. 각 메서드는 고유한 용도와 기능을 가지고 있으며 상황에 맞게 선택하여 사용하실 수 있습니다.

파일 읽고 쓰기 (Read and Write a File)

파일 오픈
파일을 읽거나 쓰려면 먼저 IO 리소스를 사용하여 파일을 열어야 합니다. 파일은 읽거나/쓰기 목적으로 열 수 있습니다. FileInfo 클래스는 파일을 열기 위해 네 가지 메서드를 제공합니다.

  • Open
  • OpenRead
  • OpenText
  • OpenWrite

File.Open

연 파일을 지정된 파일 모드에서 FileStream으로 엽니다.

FileStream fs = fi.Open(FileMode.Open, FileAccess.Write);

다음은 완전한 코드 샘플입니다.

string fileName = @"D:\TestText.txt";
FileInfo fi = new FileInfo(fileName);
// 파일이 존재하지 않으면 파일을 생성합니다.
if (!fi.Exists)
{
    // 파일을 생성합니다.
    using (FileStream fs = fi.Create())
    {
        Byte[] info = new UTF8Encoding(true).GetBytes("파일 시작");
        fs.Write(info, 0, info.Length);
    }
}
try
{
    using (FileStream fs = fi.Open(FileMode.Open, FileAccess.Write))
    {
        Byte[] info = new UTF8Encoding(true).GetBytes("더 많은 텍스트 추가");
        fs.Write(info, 0, info.Length);
    }
}
catch (Exception Ex)
{
    Console.WriteLine(Ex.ToString());
}
File.Open
File.Open

File.OpenRead

OpenRead 메서드는 파일을 읽기 위해 파일을 엽니다. 이 메서드는 Read 메서드를 사용하여 파일을 읽는 데 사용되는 FileStream 개체를 반환합니다.

string fileName = @"D:\TestText.txt";
FileInfo fi = new FileInfo(fileName);
FileStream fs = fi.OpenRead();

파일은 바이트 배열로 읽힙니다. 다음 코드 조각은 FileStream을 사용합니다. Read 메서드를 사용하여 텍스트를 바이트 배열로 가져온 다음 UTF8Encoding.GetString 메서드를 사용하여 문자열로 변환합니다.

using (FileStream fs = fi.OpenRead())
{
    byte[] byteArray = new byte[1024];
    UTF8Encoding fileContent = new UTF8Encoding(true);
    while (fs.Read(byteArray, 0, byteArray.Length) > 0)
    {
        Console.WriteLine(fileContent.GetString(byteArray));
    }
}

다음은 완전한 코드 샘플 목록입니다.

string fileName = @"D:\TestText.txt";
FileInfo fi = new FileInfo(fileName);
// 파일이 존재하지 않으면 파일을 생성합니다.
if (!fi.Exists)
{
    // 파일을 생성합니다.
    using (FileStream fs = fi.Create())
    {
        Byte[] info = new UTF8Encoding(true).GetBytes("파일 시작");
        fs.Write(info, 0, info.Length);
    }
}
try
{
    using (FileStream fs = fi.OpenRead())
    {
        byte[] byteArray = new byte[1024];
        UTF8Encoding fileContent = new UTF8Encoding(true);
        while (fs.Read(byteArray, 0, byteArray.Length) > 0)
        {
            Console.WriteLine(fileContent.GetString(byteArray));
        }
    }
}
catch (Exception Ex)
{
    Console.WriteLine(Ex.ToString());
}
File.OpenRead
File.OpenRead

File.OpenText

OpenText 메서드는 기존의 UTF-8로 인코딩된 텍스트 파일을 읽기 위해 파일을 엽니다. OpenText 메서드는 파일 이름을 매개변수로 받고 StreamReader 개체를 반환합니다.

StreamReader reader = fi.OpenText();

StreamReader 개체를 가지고 있으면 해당 개체의 Read 또는 ReadLine 메서드를 사용하여 내용을 읽을 수 있습니다. ReadLine 메서드는 한 번에 한 줄씩 읽습니다. 다음 코드 조각은 SteamReader의 전체 내용을 반복하여 한 번에 한 줄씩 읽고 출력합니다.

while ((s = reader.ReadLine()) != null)
{
    Console.WriteLine(s);
}

다음은 완전한 코드 샘플 목록입니다.

string fileName = @"D:\TestText.txt";
FileInfo fi = new FileInfo(fileName);
// 파일이 존재하지 않으면 파일을 생성합니다.
if (!fi.Exists)
{
    // 파일을 생성합니다.
    using (FileStream fs = fi.Create())
    {
        Byte[] info = a UTF8Encoding(true).GetBytes("파일 시작");
        fs.Write(info, 0, info.Length);
    }
}
try
{
    using (StreamReader reader = fi.OpenText())
    {
        string s = "";
        while ((s = reader.ReadLine()) != null)
        {
            Console.WriteLine(s);
        }
    }
}
catch (Exception Ex)
{
    Console.WriteLine(Ex.ToString());
}

File.OpenWrite

OpenWrite 메서드는 파일을 쓰기 위해 파일을 엽니다. 파일이 존재하지 않으면 새 파일을 생성하고 쓰기 위해 엽니다. OpenWrite 메서드는 지정된 파일의 FileStream 개체를 반환합니다.

FileStream fs = fi.OpenWrite();

FileStream 개체를 가지고 있으면 파일에 쓰기 위해 Write 메서드를 사용할 수 있습니다. Write 메서드는 바이트 배열을 사용합니다. 다음 코드 조각은 바이트 배열을 생성하고 FileStream의 Write 메서드에 전달합니다.

Byte[] info = new UTF8Encoding(true).GetBytes("OpenWrite 메서드를 사용한 새 파일\n");
fs.Write(info, 0, info.Length);

다음은 완전한 코드 샘플 목록입니다.

string fileName = @"D:\TestText.txt";
FileInfo fi = new FileInfo(fileName);
// 파일이 존재하지 않으면 파일을 생성합니다.
if (!fi.Exists)
{
    // 파일을 생성합니다.
    using (FileStream fs = fi.Create())
    {
        Byte[] info = new UTF8Encoding(true).GetBytes("파일 시작");
        fs.Write(info, 0, info.Length);
    }
}
try
{
    // 파일을 열고 내용을 추가합니다.
    using (FileStream fs = fi.OpenWrite())
    {
        Byte[] info = new UTF8Encoding(true).GetBytes("OpenWrite 메서드를 사용한 새 파일\n");
        fs.Write(info, 0, info.Length);
        info = new UTF8Encoding(true).GetBytes("----------시작------------------------\n");
        fs.Write(info, 0, info.Length);
        info = new UTF8Encoding(true).GetBytes("작성자: 하로스튜디오\n");
        fs.Write(info, 0, info.Length);
        info = new UTF8Encoding(true).GetBytes("----------종료------------------------");
        fs.Write(info, 0, info.Length);
    }
    // 파일 내용을 읽어서 콘솔에 표시합니다.
    using (FileStream fs = File.OpenRead(fileName))
    {
        byte[] byteArray = new byte[1024];
        UTF8Encoding fileContent = new UTF8Encoding(true);
        while (fs.Read(byteArray, 0, byteArray.Length) > 0)
        {
            Console.WriteLine(fileContent.GetString(byteArray));
        }
    }
}
catch (Exception Ex)
{
    Console.WriteLine(Ex.ToString());
}
OpenRead OpenWrite
OpenRead OpenWrite

파일 추가 (Append File)

AppendText 메서드는 기존의 텍스트 파일에 UTF-8로 인코딩된 텍스트를 추가하는 StreamWriter 개체를 생성합니다.

string fileName = @"D:\TestText.txt";
FileInfo fi = new FileInfo(fileName);
using (StreamWriter sw = fi.AppendText())
{
	sw.WriteLine("\n--------- 텍스트 추가 시작 ----------");
	sw.WriteLine(" AppendText 테스트 ");
	sw.WriteLine("--------- 텍스트 추가 끝 ----------");
}
// 모든 텍스트 읽기
string readText = File.ReadAllText(fileName);
Console.WriteLine(readText);
ReadAllText
ReadAllText

파일 복사(Copy file)

파일 복사 메서드(Copy)는 지정된 위치에 기존 파일을 새 파일로 복사합니다. 복사 메서드는 두 개의 매개변수를 사용합니다. 첫 번째 매개변수는 복사할 파일 이름이며, 전체 경로를 포함해야 합니다. 두 번째 매개변수는 선택적이며 기존 파일을 덮어쓸 때 사용됩니다. 두 번째 매개변수가 true인 경우, 파일이 이미 존재하는 경우 복사 메서드는 덮어쓸 것입니다.

다음 코드 스니펫은 파일을 대상 파일로 복사합니다.

string fileName = @"D:\TestText.txt";
FileInfo fi = new FileInfo(fileName);
string destinationFile = @"D:\TestTextCopyed.txt";
try
{
    fi.CopyTo(destinationFile, true);
}
catch (IOException iox)
{
    Console.WriteLine(iox.Message);
}

파일 이동(Move File)

이동 메서드 Move 는 기존 파일을 동일한 이름 또는 다른 파일 이름으로 새 위치로 이동합니다. 먼저, 이동 메서드는 이동할 파일의 전체 경로를 가져옵니다. 그런 다음, 이동 메서드는 원본 파일을 삭제합니다.

다음 코드 스니펫은 소스 파일을 대상 파일로 이동합니다.

string fileName = @"D:\TestText.txt";
FileInfo fi = new FileInfo(fileName);
string destinationFile = @"D:\TestTextMoved.txt";
try
{
    fi.MoveTo(destinationFile);
}
catch (IOException iox)
{
    Console.WriteLine(iox.Message);
}

파일 대체하기(Replace File)

대체 메서드 Replace 는 지정된 파일의 내용을 다른 파일의 내용으로 대체합니다. 이 메서드는 원본 파일을 삭제하고 대체 파일의 백업을 생성합니다.

다음 코드 스니펫은 원본 파일의 내용을 대체 파일로 이동하고 대체 파일의 백업을 만들며 원본 파일을 삭제합니다.

string repFile = @"D:\TestText.txt";
string backupFile = @"D:\TestText.txt.bak";
string fileName = @"D:\TestText.txt";
FileInfo fi = new FileInfo(fileName);
try
{
    fi.Replace(repFile, backupFile, false);
}
catch (IOException iox)
{
    Console.WriteLine(iox.Message);
}

파일 삭제 (Delete File)

삭제 메서드(Delete)는 지정된 파일을 영구적으로 삭제합니다. 다음 코드 스니펫은 파일을 삭제합니다.

string fileName = @"D:\TestText.txt";
FileInfo fi = new FileInfo(fileName);
try
{
    fi.Delete();
}
catch (IOException iox)
{
    Console.WriteLine(iox.Message);
}

이외에도 파일 암복호화 기능도 있습니다.
fi.Encrypt();
fi.Decrypt();

결론

이 글에서는 C# FileInfo 클래스를 사용하여 파일 생성, 편집, 삭제, 이동 같은 파일 작업을 수행하는 방법을 배웠습니다.

Leave a Comment