C#

C# 메모장 저장 및 로드

작성자 정보

  • 마스터 작성
  • 작성일

컨텐츠 정보

본문

 C# 메모장 불러오기 코드

using System.IO;

using System.Text;

 

string path = Directory.GetCurrentDirectory();

path += "\\saveData.txt";

 

string[] textValue = System.IO.File.ReadAllLines(path);

 

코드 풀이

 

1.using 선언

using System.IO;

using System.Text;

메모장 저장과 로드에 필요한 라이브러리 입니다.

 

2.경로 설정 및 파일 설정

 

string path = Directory.GetCurrentDirectory();     

 

path += "\\saveData.txt";          

                    

Directory.GetCurrentDirectory() - 현재 파일 경로를 불러오는 메서드 string으로 반환 

\\ 현재 폴더임을 명시하기 위해 역슬래시가 필요, 문자열에서 이스케이프 문자를 사용하려면 \\를 두번 적어야 \로 표기됨

saveData.txt 불러올 파일명과 형식

 

3.메모장에서 읽은 데이터를 줄마다 읽고 string 배열에 저장함

System.IO.File.ReadAllLines(path);

path에 있는 모든 라인을 읽음

 

 

 

 C# 메모장 저장 코드

using System.IO;

using System.Text;

 

string path = Directory.GetCurrentDirectory();

path += "\\saveData.txt";

 

 string[] saveDate = {

      player.maxHp.ToString(),

     "\n"+player.currentHp.ToString(),

     "\n"+player.level.ToString(),

     "\n"+player.currentExp.ToString(),

     "\n"+player.maxExp.ToString(),

     "\n"+player.className,

     "\n"+player.atk.ToString(),

     "\n"+player.def.ToString(),

     "\n"+player.gold.ToString(),

     "\n"+player.equipment[0],

     "\n"+player.equipment[1],

     "\n"+player.equipment[2],

     "\n"+player.maxInventory.ToString()

 };

 

 for(int i = 0; i < saveDate.Length; i++)

 {

     if(i == 0) System.IO.File.WriteAllText(path, saveDate[i], Encoding.Default);

     else System.IO.File.AppendAllText(path, saveDate[i], Encoding.Default);

 } 

 

 

코드 풀이

 

1.using 선언

using System.IO;

using System.Text;

메모장 저장과 로드에 필요한 라이브러리 입니다. 

 

2.경로 설정 및 파일 설정

string path = Directory.GetCurrentDirectory();     

path += "\\saveData.txt";           

                   

Directory.GetCurrentDirectory() - 현재 파일 경로를 불러오는 메서드 string으로 반환 

\\ 현재 폴더임을 명시하기 위해 역슬래시가 필요, 문자열에서 이스케이프 문자를 사용하려면 \\를 두번 적어야 \로 표기됨

saveData.txt 저장할 파일명과 형식, 같은 파일명이 존재하면 덮어 쓰기, 없으면 새로 생성함

 

3.저장할 데이터 배열

string으로 저장해야 하기 때문에 캐스팅을 사용했음 문자열은 그대로 써도 되지만 int는 ToString()을 사용하여 변환 해야 함

또한 줄바꿈이 필요 하기 때문에 이스케이프 문자인 \n을 사용했음

 

4.데이터 저장

System.IO.File.WriteAllText(path, saveDate[i], Encoding.Default); - 모든 데이터를 바꿈 기존 데이터 또한 날아감

System.IO.File.AppendAllText(path, saveDate[i], Encoding.Default); - 데이터를 추가함 

 

WriteAllText()의 경우 모든 데이터를 해당 데이터로 바꾸기 때문에 초기 데이터를 날리기에는 좋음

하지만 이것을 사용하여 작성하면 맨 마지막 데이터 만 들어가게 됨

따라서 맨처음 0번째 배열에서만 WriteAllText()을 사용하고 그 다음 데이터 AppendAllText()로 넣었음

 

 

 C# 메모장 저장 코드 변경

- 배열을 사용할 경우 배열의 크기의 변화가 힘들기 때문에 리스트로 변경하여 작업을 진행 하였음

- 리스트를 사용하여 저장시 한줄로 쭉 나열되기 때문에 saveDate.Add("\n");를 매 작업마다 추가 하였음. 

- 아이템의 경우 내가 구매한 경우에 따라 크기가 계속 변하기 때문에 리스트를 사용해야 합니다!

string path = Directory.GetCurrentDirectory();

path += "\\saveData.txt";


List<string> saveDate = new List<string>();

saveDate.Add(player.maxHp.ToString());

saveDate.Add("\n");

saveDate.Add(player.currentHp.ToString());

saveDate.Add("\n");

saveDate.Add(player.level.ToString());

saveDate.Add("\n");

saveDate.Add(player.currentExp.ToString());

saveDate.Add("\n");

saveDate.Add(player.maxExp.ToString());

saveDate.Add("\n");

saveDate.Add(player.className);

saveDate.Add("\n");

saveDate.Add(player.atk.ToString());

saveDate.Add("\n");

saveDate.Add(player.def.ToString());

saveDate.Add("\n");

saveDate.Add(player.gold.ToString());

saveDate.Add("\n");

saveDate.Add(player.equipment[0]);

saveDate.Add("\n");

saveDate.Add(player.equipment[1]);

saveDate.Add("\n");

saveDate.Add(player.equipment[2]);

saveDate.Add("\n");

saveDate.Add(player.maxInventory.ToString());

saveDate.Add("\n");

saveDate.Add(player.isbuy[0]);

saveDate.Add("\n");

saveDate.Add(player.isbuy[1]);

saveDate.Add("\n");

saveDate.Add(player.isbuy[2]);

saveDate.Add("\n");

saveDate.Add(player.isbuy[3]);

saveDate.Add("\n");

saveDate.Add(player.isbuy[4]);

saveDate.Add("\n");

saveDate.Add(player.isbuy[5]);

saveDate.Add("\n");

saveDate.Add(player.isbuy[6]);

saveDate.Add("\n");

saveDate.Add(player.isbuy[7]);

saveDate.Add("\n");

saveDate.Add(player.appendAtk.ToString());

saveDate.Add("\n");

saveDate.Add(player.appendDef.ToString());

saveDate.Add("\n");

saveDate.Add(player.list.Count.ToString());

saveDate.Add("\n");

for (int i = 0; i < player.list.Count; i++)

{

    saveDate.Add(player.list[i].type);

    saveDate.Add("\n");

    saveDate.Add(player.list[i].name);

    saveDate.Add("\n");

    saveDate.Add(player.list[i].power.ToString());

    saveDate.Add("\n");

    saveDate.Add(player.list[i].price.ToString());

    saveDate.Add("\n");

    saveDate.Add(player.list[i].info);

    saveDate.Add("\n");

    saveDate.Add(player.list[i].isEquip.ToString());

    saveDate.Add("\n");

}



// text file 의 내용을 한줄 씩 읽어와 string 배열에 대입 합니다.

for (int i = 0; i < saveDate.Count; i++)

{

    if(i == 0) System.IO.File.WriteAllText(path, saveDate[i], Encoding.Default);

    else System.IO.File.AppendAllText(path, saveDate[i], Encoding.Default);

}

관련자료

댓글 0
등록된 댓글이 없습니다.
알림 0