내일배움캠프/TIL

내일배움캠프 8일차 TIL - 텍스트 파일을 읽을때 주의할 점

서보훈 2024. 9. 24. 20:09

문제 상황

게임을 불러오는데 성공한 후, 게임을 저장하려는데 저장이 안되고 프로그램이 멈추는 문제가 발생했습니다.

 

시도해본 것, 해결방법

당시 발생한 문제 상황인데.

마지막의 because it is being used by another process 를 보고 무슨 상황인지 이해하였습니다.

public bool LoadGame()
{
    //파일이 없으면 불러오기 실패
    if(!File.Exists(txtPath))
    {
        return false;
    }
    else
    {
        //리스트를 비워서 불러올 준비
        saveDataList.Clear();
        //줄 불러오기
        StreamReader reader = new StreamReader(txtPath);
        string readLine;
        while((readLine = reader.ReadLine()) != null)
        {
            //각 줄을 리스트에 저장
            saveDataList.Add(readLine);
        }
        return true;
    }
}

게임을 불러오면서 텍스트 파일을 연 뒤, 해당 파일의 사용종료(파일 닫기) 를 선언하지 않은상태입니다.

public bool LoadGame()
{
    //파일이 없으면 불러오기 실패
    if(!File.Exists(txtPath))
    {
        return false;
    }
    else
    {
        //리스트를 비워서 불러올 준비
        saveDataList.Clear();
        //줄 불러오기
        StreamReader reader = new StreamReader(txtPath);
        string readLine;
        while((readLine = reader.ReadLine()) != null)
        {
            //각 줄을 리스트에 저장
            saveDataList.Add(readLine);
        }
        //파일 사용 끝
        reader.Close();
        return true;
    }
}

StreamReader 클래스의 객체를 통해 텍스트 파일을 연 상태이기 때문에

해당 객체의 Close() 함수를 이용하여 사용 종료를 선언하고 파일을 닫으면 문제가 해결됩니다.

 

알게된 점

C, C++, C#, 파이썬 등 어떠한 프로그램을 사용하든 프로그램에서 다른 폴더나 파일을 읽게되면 해당 폴더의 사용이 종료되었음을 꼭 선언해주어야 합니다.

 

그렇지 않을경우 해당 파일은 계속 프로그램이 사용중인것으로 인식하게 되며, 이후 해당 폴더에 다시 접근할 때 문제가 발생할 수 있습니다