HOWTO · MATLAB

MATLAB에서 파일의 존재 확인

MATLAB의 exist() 및 dir() 함수를 사용하여 파일이 디렉터리에 있는지 확인할 수 있습니다.

이 페이지의 내용

간단히 확인하려면 exist()를 사용하고, 일치 항목의 세부 정보도 필요하면 dir()를 사용하세요. MATLAB이 검색할 위치를 지정하려면 파일 이름이나 경로를 명시적으로 전달하면 됩니다. 아래 예제는 각각 임시 파일을 만들며 MATLAB과 호환되는 구문을 사용합니다. 두 예제는 Octave에서 실행했으며, 표시된 출력은 MATLAB이 아닌 Octave의 결과입니다.

MATLAB에서 exist() 함수로 파일이 있는지 확인하기

exist()는 파일이나 폴더를 확인할 수 있지만, 유형을 지정하지 않은 이름은 작업 공간 변수나 함수처럼 다른 MATLAB 항목과 일치할 수도 있습니다. 파일만 확인하려면 검색 유형으로 'file'을 지정하세요. 결과가 2이면 일치하는 파일이 있다는 뜻입니다. 폴더를 확인할 때는 'dir'을 지정하며, 결과가 7이면 일치하는 폴더가 있다는 뜻입니다. 결과가 0이면 요청한 유형의 항목을 찾지 못한 것입니다. MATLAB은 상대 경로를 현재 폴더와 검색 경로를 기준으로 해석합니다. 특정 위치를 지정하려면 절대 경로를 사용하세요. 자세한 내용은 MathWorks의 exist 참조 문서와 함수 우선순위 순서를 참고하세요.

다음 완전한 예제는 파일을 만든 뒤 전체 경로로 존재 여부를 확인합니다. 파일 유형 코드를 출력하며, exist()의 의미에 따르면 생성한 파일의 코드는 2입니다. Octave에서 실행했을 때 출력은 다음과 같았습니다.

root = tempname();
mkdir(root);
filePath = fullfile(root, 'report.txt');
fid = fopen(filePath, 'w');
fprintf(fid, 'Monthly report\n');
fclose(fid);

fileType = exist(filePath, 'file');
fprintf('File type: %d\n', fileType);

delete(filePath);
rmdir(root);
File type: 2

검색 유형으로 'file'을 지정하면 이름이 같은 변수나 폴더를 원하는 파일로 잘못 판단하지 않습니다. 폴더를 확인하려면 대신 exist(folderPath, 'dir')을 호출하세요. 예전 명령 형식인 exist name은 명령 창에서 간편하게 쓸 수 있고, 함수 형식은 스크립트에서 결과를 저장하고 비교할 수 있습니다.

MATLAB에서 dir() 함수로 파일이 있는지 확인하기

일치 항목이 있는지 확인하면서 그 세부 정보도 얻으려면 dir()을 사용하세요. 이 함수는 구조체 배열을 반환하며, 각 일치 항목에는 name, folder, date, bytes, isdir 같은 필드가 포함될 수 있습니다. 필드 구성은 MATLAB 릴리스에 따라 달라질 수 있으므로 필드 수가 항상 같다고 가정하지 마세요. isempty(matches)로 패턴에 일치하는 항목이 있는지 확인할 수 있고, 파일이 일치했다면 matches(1).bytes로 바이트 크기를 확인할 수 있습니다. 폴더 결과는 디렉터리 항목이지, 항목 수가 고정된 목록이 아닙니다. 폴더 경로에 dir()을 호출하면 그 폴더의 내용을 나열할 수 있으므로, 파일과 폴더를 구분할 때는 isdir을 확인하세요. 상대 경로는 MATLAB의 현재 폴더를 기준으로 사용됩니다. 전체 경로를 지정하면 대상 위치가 명확해집니다. 자세한 내용은 MathWorks의 dir 참조 문서를 참고하세요.

별도의 다음 예제는 파일을 만든 뒤 정확한 경로를 dir()에 전달하고, 반환된 이름과 크기를 출력합니다. Octave에서 실행했을 때 출력은 다음과 같았습니다.

root = tempname();
mkdir(root);
filePath = fullfile(root, 'animal.jpg');
fid = fopen(filePath, 'w');
fprintf(fid, 'image data');
fclose(fid);

matches = dir(filePath);
if isempty(matches)
    fprintf('No match\n');
else
    fprintf('Name: %s\n', matches(1).name);
    fprintf('Bytes: %d\n', matches(1).bytes);
end

delete(filePath);
rmdir(root);
Name: animal.jpg
Bytes: 10

파일이 있는지만 확인할 때는 exist(path, 'file')이 더 간단합니다. 항목의 세부 정보나 와일드카드로 찾은 목록이 필요하면 dir()을 선택하세요. 반환된 구조체 배열을 확인하고, 폴더 목록의 크기로 파일 일치 여부를 판단하지 마세요.