유니티 C# - Folder

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

유니티에서 파일만 만들 수 있는 것은 아니다. 파일을 담을 수 있는 폴더를 만들 수 있다. 파일을 만드는 방법과 마찬가지로 폴더를 만들고자 하면 using System.IO;를 스크립트 상단에 작성 해야 한다.
다음과 같은 코드를 작성하겠다.

public class FolderControl : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        Directory.CreateDirectory(@"C:\TestFolder\");
    }

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

그리고 파일 탐색기에서 C:\주소로 들어가면 현재 TestFodler라는 폴더는 존재하지 않는다는 것을 볼 수 있다.
Directory.CreateDirectory(@"C:\TestFolder\");이부분에서 @를 사용하는 이유는 \가 '\'으로 입력이 될 수 있다. 하지만 앞에 @를 붙이면 \로 인식 하도록 해줄 수 있다.게임을 실행시켜주면 이제 C:\경로에 TestFolder 라는 폴더가 생성된다.

코드를 이어서 써보면

public class FolderControl : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        Directory.CreateDirectory(@"C:\TestFolder\");
    }

    // Update is called once per frame
    void Update()
    {
        if(Input.GetMouseButtonDown(0))
        {
            string[] files = Directory.GetFiles(@"C:\TestFolder\");

            for(int i = 0; i < files.Length; i++)
            {
                Debug.Log(files[i]);
            }
        }
    }
}

저장을 하고. 새로 유니티를 통해 생성된 TestFolder안에서 새로운 파일을 직접 만들겠다.

이런식으로 텍스트 문서를 하나 만들고 안에 내용은 없어도 된다.
같은 방식으로 두개를 더 만들면 이러한 모습이 나올 것이다.

다시 유니티로 돌아가 플레이 버튼을 누른 후 게임창에서 좌클릭을 해보자. 그러면 다음과 같은 문자열이 콘솔창에 출력 된다.

보면 알겠지만 string[] files = Directory.GetFiles(@"C:\TestFolder\");라는 코드는 내가 지정한 경로에 있는 모든 파일을 문자열 형태로 가져오고 files라는 배열에 담겠다는 의미다.

for(int i = 0; i < files.Length; i++)
{
	Debug.Log(files[i]);
}

위에 있는 코드를 지우고 밑에 있는 코드로 바꿔주겠다.

foreach (string item in files)
{
	File.Delete(item);
}

저장하고 유니티로 돌아가 플레이 버튼을 누르고 게임창에서 다시 좌클릭을 해보자.
이렇게 되면 TestFolder안에 모든 파일들이 삭제된 것을 볼 수가 있다.
이 상태로 다시 TestFolder로 돌아가서 다음과 같은 내용물을 추가했다.

다 만들고 난후 다시 유니티로 돌아가 플레이하고 게임창에서 좌클릭을 하면 파일만 사라지고 폴더는 그대로 있다.
폴더를 삭제하고 싶으면 다음과 같은 방법으로 삭제를 할 수 있다. 아주 간단하다.

string[] folders = Directory.GetDirectories(@"C:\TestFolder\");
foreach (string item in folders)
{
	Directory.Delete(item);
}

파일 삭제와 매우 흡사하다. 저장하고 TestFolder안에 다시 새 텍스트 파일 3개를 만들어 총 3개의 파일과 3개의 폴더가 있도록 해준다.
스크립트의 내용은 다음과 같이 작성해준다.

public class FolderControl : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        Directory.CreateDirectory(@"C:\TestFolder\");
    }

    // Update is called once per frame
    void Update()
    {
        if(Input.GetMouseButtonDown(0))
        {
            string[] files = Directory.GetFiles(@"C:\TestFolder\");
            foreach (string item in files)
            {
                File.Delete(item);
            }

            string[] folders = Directory.GetDirectories(@"C:\TestFolder\");
            foreach (string item in folders)
            {
                Directory.Delete(item);
            }
        }
    }
}

코드를 분석하면

  1. 먼저 C:/ 경로에 TestFolder를 만들고
  2. 유저가 좌클릭을 하면 TestFolder안에 모든 파일을 string타입의 files배열에 담아주고
  3. 모든 파일을 삭제시킨다.
  4. 그러고 TestFolder안에 모든 폴더를 string타입의 fodlers배열에 담아주고
  5. 모든 폴더를 삭제시킨다.

플레이를 해보면 모든 파일과 폴더가 삭제되는것을 볼 수 있다.

string 타입의 변수를 두개 만들었는데 굳이 이렇게 안해도 된다. 기존에 만들어놓은 string타입의 배열에 담아줘도 무방하다.

하지만 주의해야할점은 폴더를 지울때 폴더안에 내용물이 있으면 유니티에서 에러가 발생한다.
TestFolder안에 새폴더를 만들고 그안에 새로운 텍스트파일을 만들어주겠다.

플레이하고 좌클릭을하면

콘솔창에 이러한 에러 메시지가 나온다. 그렇기 때문에 폴더를 삭제하려고 하면 그 폴더에 내용이 있는지 없는지 잘 살펴봐야 한다.

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

0개의 댓글