Monday, January 22, 2007
C언어-VC] 파일 속성(읽기전용/히든 속성 등) 출력; Print File Attributes: ARHS
윈도우의 각 파일에는 대부분 속성이 있습니다. 다음과 같은 것입니다.
A : 기록 가능 (백업 속성)
R : 읽기 전용 속성
H : 숨김(히든) 속성
S : 시스템 속성
비주얼C에서 파일의 속성을 얻은 후 화면에, [ARHS] 이런 형식의 문자열로 출력하는 방법입니다.
소스 파일명: 0.cpp
(현재 디렉토리에 "Beatles, The - All My Loving.mp3" 이런 이름의 파일이 있다고 가정하고...)
컴파일 및 실행 결과:
(현재 디렉토리의 "Beatles, The - All My Loving.mp3" 라는 파일이 "읽기 전용 속성"만을 가지고 있을 때)
파일의 속성을 변경해 주면 출력 결과도 달라집니다.
▶▶ C언어 VC] 파일 속성; 읽기 전용 여부 판단 함수; is File Readonly?
▶▶ C언어 VC] 숨김 속성, 히든 파일 여부 판단 함수; is File Hidden?
▶▶ 파일의 '기록 가능 속성 (Archive File Attribute)' / '보관 속성'이란 무엇입니까? [QnA]
▶▶ C언어] 파일 타임 스탬프, 파일 날짜 시간 구하기 함수; File Time Stamp, Last Write Date
DIR 명령 구현 소스: ▶▶ C언어 VC] 도스 DIR 명령 구현; 파일 목록(리스트) 출력; 와일드 카드(Wild Card) 지원
A : 기록 가능 (백업 속성)
R : 읽기 전용 속성
H : 숨김(히든) 속성
S : 시스템 속성
비주얼C에서 파일의 속성을 얻은 후 화면에, [ARHS] 이런 형식의 문자열로 출력하는 방법입니다.
Visual C에서, 파일 속성 출력 예제
소스 파일명: 0.cpp
(현재 디렉토리에 "Beatles, The - All My Loving.mp3" 이런 이름의 파일이 있다고 가정하고...)
#include <stdio.h>
#include <stdlib.h> // exit()
#include <io.h>
#include <errno.h>
char* attribToString(unsigned attrib);
int main(void) {
_finddatai64_t c_file;
intptr_t hFile;
char* filename = "Beatles, The - All My Loving.mp3";
if ( (hFile = _findfirsti64(filename, &c_file)) == -1L ) {
switch (errno) {
case ENOENT:
printf(":: 파일이 없음 ::\n"); break;
case EINVAL:
fprintf(stderr, "Invalid path name.\n"); exit(1); break;
case ENOMEM:
fprintf(stderr, "Not enough memory or file name too long.\n"); exit(1); break;
default:
fprintf(stderr, "Unknown error.\n"); exit(1); break;
}
} // end if
else {
printf("[%s]\n", attribToString(c_file.attrib));
} // end else
_findclose(hFile);
return 0;
}
char* attribToString(unsigned attrib) {
static char s[4 + 1];
(attrib & _A_ARCH ) ? s[0] = 'A' : s[0] = ' ';
(attrib & _A_RDONLY) ? s[1] = 'R' : s[1] = ' ';
(attrib & _A_HIDDEN) ? s[2] = 'H' : s[2] = ' ';
(attrib & _A_SYSTEM) ? s[3] = 'S' : s[3] = ' ';
return s;
}
#include <stdlib.h> // exit()
#include <io.h>
#include <errno.h>
char* attribToString(unsigned attrib);
int main(void) {
_finddatai64_t c_file;
intptr_t hFile;
char* filename = "Beatles, The - All My Loving.mp3";
if ( (hFile = _findfirsti64(filename, &c_file)) == -1L ) {
switch (errno) {
case ENOENT:
printf(":: 파일이 없음 ::\n"); break;
case EINVAL:
fprintf(stderr, "Invalid path name.\n"); exit(1); break;
case ENOMEM:
fprintf(stderr, "Not enough memory or file name too long.\n"); exit(1); break;
default:
fprintf(stderr, "Unknown error.\n"); exit(1); break;
}
} // end if
else {
printf("[%s]\n", attribToString(c_file.attrib));
} // end else
_findclose(hFile);
return 0;
}
char* attribToString(unsigned attrib) {
static char s[4 + 1];
(attrib & _A_ARCH ) ? s[0] = 'A' : s[0] = ' ';
(attrib & _A_RDONLY) ? s[1] = 'R' : s[1] = ' ';
(attrib & _A_HIDDEN) ? s[2] = 'H' : s[2] = ' ';
(attrib & _A_SYSTEM) ? s[3] = 'S' : s[3] = ' ';
return s;
}
컴파일 및 실행 결과:
(현재 디렉토리의 "Beatles, The - All My Loving.mp3" 라는 파일이 "읽기 전용 속성"만을 가지고 있을 때)
D:\Z>cl /nologo 0.cpp && 0.exe
0.cpp
[ R ]
D:\Z>
0.cpp
[ R ]
D:\Z>
출력 결과 설명
파일의 속성을 변경해 주면 출력 결과도 달라집니다.
아무 속성도 없을 때:
[ ]
백업 속성 주었을 때:
[A ]
백업+읽기전용 속성 주었을 때:
[AR ]
백업+읽기전용+히든 속성 주었을 때:
[ARH ]
백업+읽기전용+히든+시스템 속성까지 모두 주면:
[ARHS]
이제, 읽기전용 속성을 제거하면
[A HS]
백업 속성 제거하면:
[ HS]
시스템 속성 제거하면:
[ H ]
모든 속성 지웠을 때:
[ ]
[ ]
백업 속성 주었을 때:
[A ]
백업+읽기전용 속성 주었을 때:
[AR ]
백업+읽기전용+히든 속성 주었을 때:
[ARH ]
백업+읽기전용+히든+시스템 속성까지 모두 주면:
[ARHS]
이제, 읽기전용 속성을 제거하면
[A HS]
백업 속성 제거하면:
[ HS]
시스템 속성 제거하면:
[ H ]
모든 속성 지웠을 때:
[ ]
▶▶ C언어 VC] 파일 속성; 읽기 전용 여부 판단 함수; is File Readonly?
▶▶ C언어 VC] 숨김 속성, 히든 파일 여부 판단 함수; is File Hidden?
▶▶ 파일의 '기록 가능 속성 (Archive File Attribute)' / '보관 속성'이란 무엇입니까? [QnA]
▶▶ C언어] 파일 타임 스탬프, 파일 날짜 시간 구하기 함수; File Time Stamp, Last Write Date
DIR 명령 구현 소스: ▶▶ C언어 VC] 도스 DIR 명령 구현; 파일 목록(리스트) 출력; 와일드 카드(Wild Card) 지원
tag: cpp
C언어 | C/C++ (Visual C++)
<< Home