반응형
.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
반응형