유니티 C# - File

황정욱·2022년 11월 8일
0
post-thumbnail

유니티에서 제공되는 기능을 사용하면 원하는 경로에 파일을 저장할 수 있다.
FileControl이라는 스크립트를 만들고 그 안에 다음과 같은 코드를 작성해보았다.
가장먼저 스크립트 상단에 using System.IO; 작성해주자.

public class FileControl : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        Debug.Log(Application.persistentDataPath);
    }

    // Update is called once per frame
    void Update()
    {

    }
}

플레이 버튼을 누르면 콘솔창에 C:/Users/G/AppData/LocalLow/DefaultCompany/Practice이거와 비슷한 방식으로 주소가 출력이 된다. 이 주소를 복사해 파일 탐색기에 붙여놓으면 현재 비어있는 것을 알 수가 있다.
그러나 File.Create(Application.persistentDataPath + "/Testing.txt"); 이 코드를 추가하면

public class FileControl : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        Debug.Log(Application.persistentDataPath);
        File.Create(Application.persistentDataPath + "/Testing.txt");
    }

    // Update is called once per frame
    void Update()
    {

    }
}

파일이 하나 생기는 것을 볼 수가 있다. Testing이라는 이름을 가진 텍스트 파일이 생겼다.
File.WriteAllText(Application.persistentDataPath + "/Testing.txt", "Hello"); 를 추가해보자.

public class FileControl : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        Debug.Log(Application.persistentDataPath);
        File.Create(Application.persistentDataPath + "/Testing.txt");
        File.WriteAllText(Application.persistentDataPath + "/Testing.txt", "Hello");
    }

    // Update is called once per frame
    void Update()
    {

    }
}

플레이 버튼을 누르면 마치 텍스트 파일에 Hello라는 문자열이 저장될 것처럼 보이지만 에러가 발생한다. 그렇기 때문에 File.Create(Application.persistentDataPath + "/Testing.txt");를 주석 처리하고 경로에 있는 파일을 지우고 다시 플레이 버튼을 눌러본다.

그러면 파일이 생성됨과 동시에 텍스트파일 안에 Hello가 저장되어 있다.
File.WriteAllText(Application.persistentDataPath + "/Testing.txt", "Unity!");를 추가하면 HelloUnity!가 출력되는것이 아니다. 지정한 경로에 존재하는 파일을 덮어씌우는 방식이다. 그렇기 때문에 플레이 버튼을 누르면 Hello는 삭제되고 Unity!만 보일 것이다.

File.Copy(Application.persistentDataPath + "/Testing.txt", Application.persistentDataPath + "/Copied_Testing_File.txt");를 추가해보자.
위와 같은 코드를 작성하면 같은 경로에/Copied_Testing_File.txt의 파일이 생성된다. Testing파일의 똑같은 복사본이다.

파일을 생성시킨 후 필요하지 않게 되면 삭제까지 해줄 수가 있다.
먼저 File.Copy(Application.persistentDataPath + "/Testing.txt", Application.persistentDataPath + "/Copied_Testing_File.txt");이부분을 주석처리해보자.

그런 다음 File.Delete(Application.persistentDataPath + "/Testing.txt");
를 다음 줄에 작성하고 플레이 해보자. 플레이 버튼을 누르고 난 후 경로로 다시 찾아가면 Testing.txt파일이 삭제가 되었다. 완전히 삭제가 된것은 아니고 휴지통으로 삭제가 이루어진 것이다.

하지만 우리가 게임을 하면서 이미 만들어진 파일이 존재하는지 확인을 해야 파일을 새로 생성시키거나 혹은 지워야 한다. 그렇기 때문에 다음과 같은 코드를 작성한다.
File.Exists(Application.persistentDataPath + "/Testing.txt"이코드는 bool값으로 나오기 때문에 여부를 확인하는데 유용하다.
Debug.Log(File.Exists(Application.persistentDataPath + "/Testing.txt"));를 통해 출력을 해보자. 모든 코드를 작성환 모습이다.

public class FileControl : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        Debug.Log(Application.persistentDataPath);
        File.Create(Application.persistentDataPath + "/Testing.txt");
        //File.WriteAllText(Application.persistentDataPath + "/Testing.txt", "Hello");
        //File.WriteAllText(Application.persistentDataPath + "/Testing.txt", "Unity!");
        //File.Copy(Application.persistentDataPath + "/Testing.txt", Application.persistentDataPath + "/Copied_Testing_File.txt");
        //File.Delete(Application.persistentDataPath + "/Testing.txt");

        Debug.Log(File.Exists(Application.persistentDataPath + "/Testing.txt"));
    }

    // Update is called once per frame
    void Update()
    {

    }
}

이 코드는

  1. 경로를 출력하고
  2. Testing이라는 텍스트 파일을 생성시키고
  3. 마지막에 Testing.txt라는 파일이 있는지 없는지 출력해준다.

플레이 하기 전에 경로에 있는 모든 파일을 삭제시켜 주도록 한다.

그러면 마지막에 True가 출력이 되는 것을 볼 수 있다.

더 나아가 if문을 사용하여 여부를 확인하고 나서 파일을 생성키거나 삭제를 상황에 알맞게 할 수 있다.

profile
C언어, C#, 그리고 유니티

0개의 댓글