파일 생성, 이름 변경, 제거
새로운 파일(폴더 또는 링크)을 생성, 이름 변경, 제거하는 것과 같은 작업들은 Folder 동작들입니다. (File 동작들이 아닙니다) 왜냐하면 Folder가 자신의 안에 있는 이름을 가진 파일, 폴더, 링크들의 자신의 내용(자손)을 기억해야 할 책임이 있으며, 이 동작들은 이 내용을 조작하기 때문입니다. 그래서 이러한 동작들을 수행하려면 해당 작업의 컨텍스트가 될 부모 폴더를 가져와야 합니다.
FileSystem class에는 "부모 폴더 + 엔트리 이름" 레벨 대신 "위치" (파일 시스템) 레벨에서 작동할 수 있는 가장 빈번한 작업들을 위한 몇 가지 "단축" 동작들이 있음을 참고하십시오. 이 "단축" 동작들은 다음 샘플 코드들과 비슷하게 구현되어 있습니다. 그러나 여러 번의 Folder 생성 및 파괴로 인해 파일 시스템 인스턴스 상에서 "단축" 동작들을 호출하는 것보다 동일한 폴더 인스턴스 상에서 동작들을 호출하는 것이 더 빠릅니다.
아래 샘플 코드들에서는 존재하지 않는 파일을 식별할 수도 있는 Location 인스턴스를 갖고 있습니다. 3 종류의 동작들을 수행하고자 합니다: (존재하지 않는) 파일을 생성하고, 그것의 이름을 변경하고, 그것을 제거합니다. 만약 필요한 폴더 인스턴스를 가져오면, 이 작업들을 단일 메소드 호출로 축소시킵니다. 해당 단축 동작들도 주어집니다.
샘플 코드들에서 동작들의 오류 코드들은 처리되지 않지만 가능성만은 보여준다는 것을 참고하십시오.
이 샘플들을 작업하려면, 반드시 InputOutput 모듈을 초기화해야 합니다. (=> 더 많은 정보)
- 먼저 제거하기를 봅시다:
1. 부모 폴더를 생성함으로써:#include "Folder.hpp" // class Folder를 사용하는 데 필요한 모든 것을 가져옴 (예. Location과 Name)
GSErrCode errorCode; // 동작의 오류 코드를 저장 // 어떻게 해서든지 원하는 파일의 위치 획득하기 IO::Location fileLoc = GetTheFileLocation (); // 위치의 마지막 파트(즉, 파일의 이름)를 fileName으로 이동시키고 // 파일의 부모 폴더의 위치를 fileLoc에 남겨둠 IO::Name fileName; // Location 인스턴스의 파트를 저장할 수 있는 Name 인스턴스 errorCode = fileLoc.MoveLastLocalName (&fileName); // 파일의 부모 폴더 생성하기, 그리고 이름으로 파일 제거하기 IO::Folder parent (fileLoc); // 이제 파일의 부모 폴더를 갖게 됨 errorCode = parent.Delete (fileName); // 이름으로 파일 제거하기
2. 해당 "단축" 동작 사용하기:#include "FileSystem.hpp" // class FileSystem을 사용하는 데 필요한 모든 것을 가져옴 (예. Location)
errorCode = IO::fileSystem.Delete (fileLoc); // 위치로 파일 제거하기
- 이름 변경하기는 상당히 유사함:
1. 부모 폴더를 생성함으로써 (마지막 라인만 다름):errorCode = parent.Rename (fileName, "Backup.dat"); // 파일의 이름을 새로운 이름 "Backup.dat"으로 변경하기
2. 해당 "단축" 동작 사용하기:errorCode = IO::fileSystem.Rename (fileLoc, "Backup.dat"); // 파일의 이름을 새로운 이름 "Backup.dat"으로 변경하기
- 새로운 파일을 생성하는 것도 유사함:
1. 부모 폴더를 생성함으로써 (역시 마지막 라인만 다름):errorCode = parent.CreateFile (fileName); // 부모 폴더 안에 fileName이라는 새로운 파일 생성하기
2. 해당 "단축" 동작 사용하기:errorCode = IO::fileSystem.CreateFile (fileLoc); // 위치로 새로운 파일 생성하기
새로운 파일을 생성하고 즉시 사용하는 것은 매우 빈번한 작업이기 때문에, 한 번에 이를 수행할 수 있는 File class의 생성자가 있습니다. Location 인스턴스로부터 File 인스턴스를 생성할 때, 만약 주어진 파일이 존재하지 않을 때 발생하는 일에 대한 규정을 만들 수 있으므로 자동으로 생성하게 할 수 있습니다. 그래서 위의 제거 샘플로부터 주어진 Location fileLoc을 이용하여 한 번에 File 인스턴스를 생성할 수 있습니다:#include "File.hpp" // 파일을 사용하고자 함
IO::File file (fileLoc, IO::File::Create); // 만약 존재하지 않으면 파일 시스템에 파일을 생성함 if (file.GetStatus () == NoError) { // 모두 OK ? // 파일을 사용함 }
동일한 이름을 가진 빈 파일들을 작성하기 위해 기존의 파일들을 제거할 필요가 없다는 것을 참고하십시오. 만약 파일을 WriteEmptyMode로 열면, 내용은 지워집니다.