목차
1.Stream / StreamWriter
2. 디렉터리 존재 여부
3. 디렉토리 생성 / 삭제
4. 파일 존재 여부
5. 파일 생성 / 삭제
6. 파일 읽기
📝 System.IO 네임스페이스
using System.IO;
: 파일 시스템 작업 ( 디렉터리 / 파일 생성, 삭제, 수정 )에 관한 기능 제공
: 텍스트 파일 작업 ( 파일 데이터 읽기 쓰기 )에 관한 기능 제공
→ 더 많은 Syatem.IO 네임스페이스 기능
https://learn.microsoft.com/ko-kr/dotnet/standard/io/common-i-o-tasks
공통적인 I/O 작업 - .NET
.NET의 System.IO 네임스페이스에 있는 클래스와 메서드를 사용하여 공통적인 파일 작업 및 공통적인 디렉터리 작업을 수행하는 방법을 알아봅니다.
learn.microsoft.com
📝 1. Stream / StreamWriter
□ Stream 클래스
■ 마이크로소프트의 홈페이지의 설명에는 " 바이트 시퀀스의 제네릭 뷰를 제공"라는 표현을 사용한다.
■ 바이트 시퀀스란?
□ 연속된 바이트들의 나열
□ 텍스트파일/이미지파일/음악파일 이 저장될 때 바이트들의 시퀀스들로 저장된다.
■ 제네릭 뷰?
□ 데이터가 무엇이든(텍스트, 이미지, 음악 등) 모두 바이트로 보고 처리할 수 있게 해주는 제네릭을 사용한다.
예시 )
타입이 다른 파일을 다룰때, 동일한 steam을 사용한다.
// 텍스트 파일을 다룰 때도 Stream 사용 가능
FileStream textFile = File.OpenRead("text.txt");
// 이미지 파일을 다룰 때도 동일한 Stream 사용 가능
FileStream imageFile = File.OpenRead("image.jpg");
□ TextWriter
■ 일련의 문자를 순차적으로 작성할 수 있는 작성기 ( 추상 클래스)
□ StreamWriter
■ TextWriter을 상속받아 실제로 구현한 클래스
■ 문자를 바이트로 변환해서 Stream에 쓰는 실제 작업을 수행
📝 2. 디렉토리 존재 여부
Directory.Exists(savepath)
□ Bool 값을 반환
■ 해당 경로에 디렉터리가 존재하면 → true
■ 해당 경로에 디렉토리가 존재하지 않으면 → false
📝 사용
using System.IO;
internal class Program
{
static void Main(string[] args)
{
string savePath = @"D:\SpartaCodingClub\TextRPGSaveFile\";
string saveFileName = "SaveFile";
// 해당 디렉토리 (폴더) 가 없으면 생성
if (!Directory.Exists(savePath))
{
Console.WriteLine("세이브 파일이 있습니다. ");
}
else
{
Console.WriteLine("세이브 파일이 없습니다. ");
}
}
}
}
📝 3. 디렉토리 생성 / 삭제
📝 생성
Directory.CreateDirectory(savePath);
□ DirectoryInfo값을 반환
■ 지정된 경로에서 디렉터리를 나타내는 개체
📝 삭제
diretoryInfo.Delete();
□ DirectoryInfo에 저장된 디렉터리를 삭제
📝 사용
using System.IO;
internal class Program
{
static void Main(string[] args)
{
string savePath = @"D:\SpartaCodingClub\TextRPGSaveFile\";
string saveFileName = "SaveFile";
// 디렉토리 생성
DirectoryInfo di = Directory.CreateDirectory(savePath);
// 디렉토리 삭제
di.Delete();
}
}
📝 4. 파일 존재 여부
File.Exists(savePath + saveFileName)
□ Bool 값을 반환
■ 해당 경로에 파일이 존재하면 → true
■ 해당 경로에 파일이 존재하지 않으면 → false
📝 사용
internal class Program
{
static void Main(string[] args)
{
string savePath = @"D:\SpartaCodingClub\TextRPGSaveFile\";
string saveFileName = "SaveFile";
if (File.Exists(path))
{
Console.WriteLine("파일이 존재합니다.");
}
}
}
📝 5. 파일 생성 / 삭제
📝 생성
File.CreateText(파일명이 포함된 경로)
□ StreamWriter 을 반환
□ 이미 해당경로에 파일이 있는 경우 해당 내용이 바뀐다.
📝 삭제
File.Delete(savePath + saveFileName);
□ 해당 경로에 있는 파일을 삭제
📝 사용
internal class Program
{
static void Main(string[] args)
{
string savePath = @"D:\SpartaCodingClub\TextRPGSaveFile\";
string saveFileName = "SaveFile";
// 저장경로에 생성
using (StreamWriter sw = File.CreateText(savePath + saveFileName))
{
sw.WriteLine("Hello ");
sw.WriteLine("I'm ");
sw.WriteLine("a talking potato.");
}
}
}
📝 5. 파일 읽기
File.ReadAllText(파일명이 포함된 경로);
□ string을 반환
■ 파일의 모든 텍스트를 포함하는 문자열
📝 사용
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
//GameManger.Instance.EnterGame();
string savePath = @"D:\Window11_TextRPG\";
string saveFileName = "TestFile";
string desString = File.ReadAllText(savePath + saveFileName);
}
}
📝 Json 타입의 문자열을 저장하고 불러오는 과정
https://youcheachae.tistory.com/32
[c#][TextRPG] 2. NewtonJson으로 직렬화&역직렬화
목차1. 저장 시스템 □ 설계 2. 저장 □ NuGet □ Newtonsoft.Json □ Json □ 직렬화 / 역직렬화 □ visual Studio에서 사용방법 □ 실제 사용 예시 📝 저장 시스템: nuget의 NewtonJ
youcheachae.tistory.com
📝 참고한 링크
https://learn.microsoft.com/ko-kr/dotnet/api/system.io.directory.createdirectory?view=net-8.0
Directory.CreateDirectory 메서드 (System.IO)
지정된 경로에 모든 디렉터리를 만듭니다.
learn.microsoft.com
https://learn.microsoft.com/ko-kr/dotnet/api/system.io.file.createtext?view=net-9.0
File.CreateText(String) 메서드 (System.IO)
UTF-8로 인코딩된 텍스트를 쓰기 위해 파일을 만들거나 엽니다. 파일이 이미 있는 경우 해당 내용이 바뀝니다.
learn.microsoft.com
https://learn.microsoft.com/ko-kr/dotnet/api/system.io.stream?view=net-8.0
Stream 클래스 (System.IO)
바이트 시퀀스의 제네릭 뷰를 제공합니다. 추상 클래스입니다.
learn.microsoft.com
https://learn.microsoft.com/ko-kr/dotnet/api/system.io.streamreader.-ctor?view=net-8.0
StreamReader 생성자 (System.IO)
지정된 스트림에 대한 StreamReader 클래스의 새 인스턴스를 초기화합니다.
learn.microsoft.com
📝 깃허브
https://github.com/kimYouChae/SpartaCodingClub
GitHub - kimYouChae/SpartaCodingClub
Contribute to kimYouChae/SpartaCodingClub development by creating an account on GitHub.
github.com
'c#' 카테고리의 다른 글
[c#] LINQ 이해하기 (0) | 2025.02.11 |
---|---|
[c#]delegate 이해하기 (1) | 2025.02.10 |
[c#][TextRPG] 2. NewtonJson으로 직렬화&역직렬화 (1) | 2025.02.06 |
[c#][TextRPG] 1. Interface를 활용한 Scene관리 / 싱글톤 (0) | 2025.02.05 |
[c#] Interface 이해하기 (0) | 2025.02.03 |