dev/asp.net, c#

[c#] 파일, 디렉토리 (File, Directory) - System.IO.File, System.IO.Directory

코딩for 2022. 11. 22. 10:28
반응형

 

 

.Net 클래스에서 파일 및 디렉토리를 다루기 위해서 System.IO 의 다음 네임스페이스를 이용해 접근할수 있습니다.

네임스페이스 설명
System.IO.File  파일에 대한 정보를 가져오기 위한 정적 메서드 제공
System.IO.FileInfo  파일에 대한 정보를 가져오기 위한 인스턴스 제공
System.IO.Directory 디렉토리일에 대한 정보를 가져오기 위한 정적 메서드 제공
System.IO.DirectoryInfo  디렉토리에 대한 정보를 가져오기 위한 인스턴스 제공
System.IO.DriveInfo 드라이브 정보에 액세스 

*Info 클래스는 인스턴스를 제공하고 Info 가 아닌 것은 정적 클래스를 제공하는것이 다르다.

 

 

System.IO.File, System.IO.FileInfo

단일 파일에 대한 만들기, 복사, 삭제, 이동 및 열기를 위한 메서드를 제공하고 FileStream 개체 만들기를 지원합니다.

 

예제

////////////////////////////////////
System.IO.File
////////////////////////////////////
    
string source = @"F:/test/source.txt";
string target = @"F:/test/test2.txt";
string moved = @"F:/test/move/test3.txt";

if (File.Exists(source))	// 해당 경로에 파일이 있는지 체크
{
    File.Delete(source);	// 파일 삭제
}
else
{
    using (var sw = File.CreateText(source))	//  텍스트 파일에 쓰기(덮어씀)
    {
        sw.WriteLine("hello");
        sw.Write("csharp world !!");
    }

    using (StreamReader sr = File.OpenText(source))		// 파일 열기
    {
        string read="";
        while ((read = sr.ReadLine()) != null)		// 라인별로 읽기
        {
            Console.WriteLine(read);
        }
    }

    using (var sw = File.AppendText(source))	// 파일의 끝에 추가
    {
        sw.Write("append hello~~");
    }

    if (File.Exists(target))
    {
        File.Delete(target);
    }

    if (File.Exists(moved))
    {
        File.Delete(moved);
    }

    File.Copy(source, target);		// 파일 복사
    File.Move(target, moved);		// 파일 이동
}
    
////////////////////////////////////
System.IO.FileInfo
////////////////////////////////////
   
var fi = new FileInfo(source);	// 파일 인스턴스 생성

if (fi.Exists)
{
    fi.Delete();
}

if (fi.Exists)
{
    fi.Delete();
}
else
{
    using (var sw = fi.CreateText())
    {
        sw.WriteLine("hello");
        sw.Write("csharp world !!");
    }

    using (StreamReader sr = fi.OpenText())
    {
        string read = "";
        while ((read = sr.ReadLine()) != null)
        {
            Console.WriteLine(read);
        }
    }

    using (var sw = fi.AppendText())
    {
        sw.Write("append hello~~");
    }

    if (fi.Exists)
    {
        fi.Delete();
    }

    if (fi.Exists)
    {
        fi.Delete();
    }

    fi.CopyTo(target);
    fi.MoveTo(moved);
}

 

System.IO.File, System.IO.FileInfo

디렉터리 복사, 이동, 이름 바꾸기, 만들기 및 삭제와 같은 일반적인 작업에 사용

 

예제

string source = @"F:/test/";
string target = @"F:/test/target";
string move = @"F:/test/move";

////////////////////////////////////
System.IO.Directory
////////////////////////////////////
if (Directory.Exists(source))			//디렉토리 존재
{
    var files = Directory.GetFiles(source);		//디렉토리내의 모든 파일명(string[] 리턴)
    foreach (var file in files)
    {
        Console.WriteLine("F: " + file);
    }

    Console.WriteLine(Directory.GetParent(source));		//현재 디렉토리의 부모디텍토리

    var dir = Directory.GetDirectories(source);	//디렉토리내의 모든 디렉토리명(string[] 리턴)
    foreach (var d in dir)
    {
        Console.WriteLine("D:" + d);
    }

}

if (Directory.Exists(target))
{
    Directory.Delete(target);
}
else
{
    Directory.CreateDirectory(target);		//디렉토리 생성

    if (Directory.Exists(move))
    {
        Directory.Delete(move);
    }

    Directory.Move(target, move);		//디렉토리 이동
}



////////////////////////////////////
System.IO.DirectoryInfo
////////////////////////////////////

DirectoryInfo di = new DirectoryInfo(source);		//디렉토리 인스턴스 생성

if(di.Exists)
{
    foreach(var d in di.GetDirectories())			//인스턴스의 모든 디렉토리 접근
    {
        Console.WriteLine("directory :" + d.FullName);
        foreach(var f in d.GetFiles())				//디렉토리의 모든 파일 접근
        {
            Console.WriteLine("    " + f.FullName);
        }
    }
}

 

System.IO.DriveInfo

현재 시스템의 모든 드라이브에 대한 정보를 표시

 

예제

DriveInfo[] allDrives = DriveInfo.GetDrives();

foreach(var drive in allDrives)
{
    Console.WriteLine("drive : " + drive.Name);
    Console.WriteLine("   DriveType  " + drive.DriveType);
    Console.WriteLine("   IsReady: " + drive.IsReady);
    if (drive.IsReady)
    {
        Console.WriteLine("   AvailableFreeSpace: " + drive.AvailableFreeSpace);
        Console.WriteLine("   TotalFreeSpace: " + drive.TotalFreeSpace);
        Console.WriteLine("   TotalSize: " + drive.TotalSize);
    }
}

 

 

참고

https://learn.microsoft.com/ko-kr/dotnet/api/system.io.file?view=net-7.0 

https://learn.microsoft.com/ko-kr/dotnet/api/system.io.fileinfo?view=net-7.0 

https://learn.microsoft.com/ko-kr/dotnet/api/system.io.directoryinfo?view=net-7.0 

https://learn.microsoft.com/ko-kr/dotnet/api/system.io.directory?view=net-7.0 

https://learn.microsoft.com/ko-kr/dotnet/api/system.io.driveinfo?view=net-7.0 

 

 

반응형