파일 로드 - FileStream, StreamReader, ReadAllText, ReadAllLines
//파일 로드 - FileStream, StreamReader, ReadAllText, ReadAllLines
//이전 글 - 파일 저장과 대입되는 4가지 방법 이다.
private string loadData; //로드한 데이터를 담을 변수
//디렉터리 경로 지정
private const string path = "./save/test1/"; //요즘 많이 사용하는 방법 /
private const string path2 = ".\\save\\test2"; //옛날부터 디렉터리 구분하는 방법 \\
private const string path3 = @".\save\test3"; //@뒤에 있는 string은 디렉터리를 표시하는 것이라고 지정 - 최신
private void PrintLoadData()
{
Console.WriteLine("읽은 데이터는 다음과 같습니다.");
Console.WriteLine("{0}\n", loadData);
}
//로드
//1. FileStream
public void LoadFromFileStream(string fileName = "S_FileString.txt")
{
string fullpath = path + "/" + fileName; //그냥 쉽게 하려고 쓴것이다. 성능은 StringBuilder이 좋다.
try
{
//파일 스트림 생성. cs파일 상단에 using System.IO; 추가
FileStream fs = new FileStream(
fullpath,
FileMode.Open,
FileAccess.Read);
//바이트 단위로 로드
byte[] bytes = new byte[fs.Length];
fs.Read(bytes, 0, bytes.Length);
loadData = Encoding.UTF8.GetString(bytes);
fs.Close();
}
//파일 못찾음
catch (FileNotFoundException) //변수 없어도 됨
{
Console.WriteLine("파일을 찾지 못했습니다.");
return;
}
//디렉터리 못찾음
catch(DirectoryNotFoundException)
{
Console.WriteLine("폴더가 없습니다.");
return;
}
catch (Exception e)
{
Console.WriteLine(e);
}
Console.WriteLine("로딩 완료 LoadFromFileStream");
PrintLoadData();
}
//2. StreamReader
public void LoadFromStreamReader(string fileName = "S_StreamWriter.txt")
{
string fullpath = path2 + "/" + fileName;
try
{
FileStream fs = new FileStream(
fullpath,
FileMode.Open,
FileAccess.Read);
StreamReader sr = new StreamReader(fs); //스트림 생성
string line;
StringBuilder builder = new StringBuilder();
while((line = sr.ReadLine()) != null) //한줄 읽는데 null이 아니면
{
builder.Append(line); //한줄 저장
builder.Append("\n"); //개행
}
loadData = builder.ToString();
sr.Close();
fs.Close();
}
//파일 못찾음
catch (FileNotFoundException) //변수 없어도 됨
{
Console.WriteLine("파일을 찾지 못했습니다.");
return;
}
//디렉터리 못찾음
catch (DirectoryNotFoundException)
{
Console.WriteLine("폴더가 없습니다.");
return;
}
catch (Exception e)
{
Console.WriteLine(e);
}
Console.WriteLine("로딩 완료 LoadFromStreamReader");
PrintLoadData();
}
//3. ReadAllText
public void LoadFromReadAllText(string fileName = "S_WriteAllText.txt")
{
string fullpath = path3 + "/" + fileName;
try
{
loadData = File.ReadAllText(fullpath); //걍 모두 저장. 한줄이라 참쉽다.
}
//파일 못찾음
catch (FileNotFoundException) //변수 없어도 됨
{
Console.WriteLine("파일을 찾지 못했습니다.");
return;
}
//디렉터리 못찾음
catch (DirectoryNotFoundException)
{
Console.WriteLine("폴더가 없습니다.");
return;
}
catch (Exception e)
{
Console.WriteLine(e);
}
Console.WriteLine("로딩 완료 LoadFromReadAllText");
PrintLoadData();
}
//4. ReadAllLines
public void LoadFromReadAllLines(string fileName = "S_WriteAllLines.txt")
{
string fullpath = path2 + "/" + fileName;
try
{
string[] lines = File.ReadAllLines(fullpath); //라인별로 string 배열에 저장
StringBuilder builder = new StringBuilder(lines.Length); //스트링 변수의 크기를 알고 있으면 선언해주는게 좋다
foreach(var line in lines)
{
builder.Append(line);
builder.Append("\n");
}
loadData = builder.ToString();
}
//파일 못찾음
catch (FileNotFoundException) //변수 없어도 됨
{
Console.WriteLine("파일을 찾지 못했습니다.");
return;
}
//디렉터리 못찾음
catch (DirectoryNotFoundException)
{
Console.WriteLine("폴더가 없습니다.");
return;
}
catch (Exception e)
{
Console.WriteLine(e);
}
Console.WriteLine("로딩 완료 LoadFromReadAllLines");
PrintLoadData();
}
'공부 > C#' 카테고리의 다른 글
Console 키입력 - Console.ReadKey, ConsoleKeyInfo (0) | 2016.05.12 |
---|---|
예외처리 - try, catch, finally, throw new Exception (0) | 2016.05.12 |
파일 저장 - FileStream, StreamWriter, WriteAllText, WriteAllLines (0) | 2016.05.12 |
컬렉션(Collection), 제네릭 컬렉션(Generic Collection) - 예) ArrayList, List<T> (0) | 2016.05.11 |
C#에서의 struct(구조체)와 class - 메모리 구조 차이, Boxing, Unboxing 예제소스 (0) | 2016.05.11 |
파일 저장 - FileStream, StreamWriter, WriteAllText, WriteAllLines
//파일 저장 - FileStream, StreamWriter, WriteAllText, WriteAllLines
//4가지 방법
//string 1줄
private string saveData = "1.테스트\n2.진행중\r\n3.입니다.";
//\n 개행 \r 캐리지리턴 - 시스템마다 개행을 나타내는 문자가 달라서 적음 \r
//string배열
private string[] saveData2 = { "1.테스트", "2.진행중", "3.입니다." };
//디렉터리(폴더) 경로 지정
private const string path = "./save/test1/"; //요즘 많이 사용하는 방법 /
private const string path2 = ".\\save\\test2"; //옛날부터 디렉터리 구분하는 방법 \\
private const string path3 = @".\save\test3"; //@뒤에 있는 string은 디렉터리를 표시하는 것이라고 지정 - 최신
//1.FileStream
public void SaveByFileStream(string fileName = "S_FileString.txt")
{
StringBuilder fullPath = new StringBuilder();
fullPath.Append(path);
fullPath.Append("/");
fullPath.Append(fileName);
//string fullPath = path + "/" + fileName;
try
{
//상단에 using System.IO; 추가
FileStream fs = new FileStream(
fullPath.ToString(),
FileMode.Create,
FileAccess.Write);
//Byte단위로 바꾸어 주어야 함.
byte[] bytes = Encoding.UTF8.GetBytes(saveData); //string문자가 UTF8인코딩으로 byte화
fs.Write(bytes, 0, bytes.Length); //byte 저장. 0부터 총 길이만큼
fs.Close();
}
catch(DirectoryNotFoundException e)
{
Console.WriteLine("디렉터리가 없습니다. 생성합니다.");
Directory.CreateDirectory(path);
SaveByFileStream(fileName);
return;
}
catch(Exception e)
{
Console.WriteLine(e);
return;
}
Console.WriteLine("세이브 완료(SaveByFileStream)");
}
//2.StreamWriter
public void SaveByFileStreamWriter(string fileName = "S_StreamWriter.txt")
{
StringBuilder fullPath = new StringBuilder();
fullPath.Append(path2);
fullPath.Append("/");
fullPath.Append(fileName);
try
{
//상단에 using System.IO; 추가
FileStream fs = new FileStream(
fullPath.ToString(),
FileMode.Create,
FileAccess.Write);
StreamWriter sw = new StreamWriter(fs); //스트림을 만들어서
sw.WriteLine(saveData); //일괄 저장
sw.Close();
fs.Close();
}
catch (DirectoryNotFoundException e)
{
Console.WriteLine("디렉터리가 없습니다. 생성합니다.");
Directory.CreateDirectory(path2); //디렉터리 생성
SaveByFileStreamWriter(fileName); //자기 자신 다시 부름
return; //함수 종료
}
catch (Exception e)
{
Console.WriteLine(e);
return;
}
Console.WriteLine("세이브 완료(SaveByFileStreamWriter)");
}
//3.WriteAllText
public void SaveByWriteAllText(string fileName = "S_WriteAllText.txt")
{
StringBuilder fullPath = new StringBuilder();
fullPath.Append(path3);
fullPath.Append("/");
fullPath.Append(fileName);
//string fullPath = path + "/" + fileName;
try
{
File.WriteAllText(fullPath.ToString(), saveData); //핵심 - string 통째로 저장
}
catch (DirectoryNotFoundException e)
{
Console.WriteLine("디렉터리가 없습니다. 생성합니다.");
Directory.CreateDirectory(path3); //디렉터리 생성
SaveByWriteAllText(fileName); //자기 자신 다시 부름
return; //함수 종료
}
catch (Exception e)
{
Console.WriteLine(e);
return;
}
Console.WriteLine("세이브 완료(SaveByWriteAllText)");
}
//4.WriteAllLines
public void SaveByWriteAllLines(string fileName = "S_WriteAllLines.txt")
{
StringBuilder fullPath = new StringBuilder();
fullPath.Append(path2);
fullPath.Append("/");
fullPath.Append(fileName);
//string fullPath = path + "/" + fileName;
try
{
File.WriteAllLines(fullPath.ToString(), saveData2); //핵심 - string 배열 저장
}
catch (DirectoryNotFoundException e)
{
Console.WriteLine("디렉터리가 없습니다. 생성합니다.");
Directory.CreateDirectory(path2); //디렉터리 생성
SaveByWriteAllLines(fileName); //자기 자신 다시 부름
return; //함수 종료
}
catch (Exception e)
{
Console.WriteLine(e);
return;
}
Console.WriteLine("세이브 완료(SaveByWriteAllLines)");
}
//짧은게 쓰기에는 편하지만 준비과정이 길고 쓰기 불편하게 성능은 더 좋지 않을 까 한다.
'공부 > C#' 카테고리의 다른 글
예외처리 - try, catch, finally, throw new Exception (0) | 2016.05.12 |
---|---|
파일 로드 - FileStream, StreamReader, ReadAllText, ReadAllLines (0) | 2016.05.12 |
컬렉션(Collection), 제네릭 컬렉션(Generic Collection) - 예) ArrayList, List<T> (0) | 2016.05.11 |
C#에서의 struct(구조체)와 class - 메모리 구조 차이, Boxing, Unboxing 예제소스 (0) | 2016.05.11 |
C#에서의 struct(구조체)와 class - 메모리 구조 차이, Boxing, Unboxing 개념 (0) | 2016.05.11 |
[잡담]유니티 첫 공부 소감
정~~~말 쉽게 3D프로그래밍을 할 수 있게
잘 만들어진 엔진 툴인거 같다.
DirectX로 게임 하나 만들 때에는
Vector3하나부터 갖가지 Matrix 변수들까지
신경 써줄게 많았는데
Unity는 오브젝트 생성이나 각각의
world의 location, scale, pos컨트롤
메테리얼 적용,
카메라 컨트롤,
충돌 함수, 조명,
심지어 셰이더로 어렵게 써야하는 그림자 까지
유니티는 그냥 된다.
말 그대로 기본적으로 되어있더라.....그냥이다...그냥...
정말 크나큰 감동이다.
아예 쌩초보자가 보기에는
위의 설명들도 어려울수 있겠고
Unity 자습서동영상을 봐도
뭔말인가 싶겠지만
DirectX에서 3D의 개념을 공부하고
익힌 사람이라면(게임 좀 쟈기가 만들어 봤다면)
Unity는 정말 쉬운 툴이다.
이렇게 첫 초행길에 감동을 받았는데
앞으로 중, 고급 스킬을 익힐 때는 어떨지 기대가 된다.
'공부 > Unity' 카테고리의 다른 글
GameObject 삭제, 활성, 비활성화 (0) | 2016.05.20 |
---|---|
[잡담]유니티를 일주일정도 공부 하면서 드는 생각 (0) | 2016.05.19 |
태그(tag)로 찾기, 비교하기 (0) | 2016.05.19 |
유니티 프로젝트 폴더 백업 방법 (1) | 2016.05.13 |
유니티 공부 시작 - 자습 방법 (0) | 2016.05.12 |