[App 개발] 디렉토리 관련 함수 질문
본문
회사에서 맥용 프로그램을 만들 일이 생겨서
vc에서 우선 c++코드로 만들어서 코드워리어로 옮겼는데요,
_finddata_t 라는 구조체와 _chdrive() 요 함수등 몇몇 io.h 헤더에 있는 내용들이 오류가 나네요.
io.h가 아마 윈도우용 c++과 mac용 c++(혹은 코드 워리어에 들어가는 c++)이 다르기 때문인거 같은데요,
혹시 맥에서는 어떤 함수나 구조체를 사용해야 하는지 알수 있을까요?
특정 파일을 검색하는 프로그램을 만드는 중이였습니다.
수고하세요.
최신글이 없습니다.
최신글이 없습니다.
댓글목록 3
hongjuny님의 댓글
일단 제가 알기로는 _finddata_t 가 아니라 _filedata_t 가 아니었는지요? (역시 래퍼런스 없으면 코딩 못 하는 게으른 hongjuny... ㅠㅠ)
findfirst(), findnext() 함수는 Mac OS X 에서도 역시 존재합니다. 대부분 런타임 라이브러리 함수들은 앞에 있는 _ 를 빼 주면 대부분 있을 겁니다. 하지만 chddrive() 는 Mac 에서는 필요없을 것 같군요. 다른 드라이브는 Volumes 폴더에 마운트되니까요.
저는 opendir(), readdir() 함수를 즐겨 씁니다. 제가 예전에 대충 얼기설기 짰던 루틴이 있는데 한 번 보시고 참고하십시오. ^^ recursive 하게 호출하셔야 할 겁니다.
void DirectorySeek( char *directory )
{
DIR *dip ;
struct dirent *dit ;
char currentdir[ 256 ] ;
char targetfilename[ 256 ] ;
if( ( dip = opendir( directory ) ) == NULL ) {
printf( "Cannot open directory: %s\\n", directory ) ;
return ;
}
while( ( dit = readdir( dip ) ) != NULL ) {
if( dit->d_type == DT_DIR && strcmp( dit->d_name, "." ) != 0 && strcmp( dit->d_name, ".." ) ) {
sprintf( currentdir, "%s/%s", directory, dit->d_name ) ;
DirectorySeek( currentdir ) ;
}
else if( strcmp( &dit->d_name[ strlen( dit->d_name ) - 3 ], "ICS" ) == 0 ||
strcmp( &dit->d_name[ strlen( dit->d_name ) - 3 ], "ics" ) == 0 ) {
sprintf( targetfilename, "%s/%s", directory, dit->d_name ) ;
printf("Read ICS: %s\\n", dit->d_name);
ReadICS( targetfilename ) ;
}
}
if( closedir( dip ) == -1 ) {
printf( "Cannot close directory: %s\\n", directory) ;
return ;
}
}
채수임님의 댓글
답변 정말 감사합니다. _finddata_t가 맞는것 같네요..^^
위의 코드는 정말 감사합니다. 많은 참고가 되것 같습니다.
그런데, Volumes폴더에 마운트가 된다고 하시는 내용이 잘 이해가 가지 않는데요,
(제가 windows프로그래밍 밖에 안해봐서-,.-)
그럼 윈도우즈에서 하는것과 달리, Volumes 폴더의 내용을 검색하여 파일이름을 읽어오면,
드라이브들을 모두 가져올수 있는 것인지요??
아... 한가지 더 말씀드리자면, 지금 만들고 있는 프로그램이 Mac OS X 에서가 아닌,
OS9 이하 버전에서 돌아가야 하기 때문에,
OS9이하 버전에서 컴파일 되는 프로그램을 찾다 보니까 "코드 워리어" 라는 프로그램을 사용하게 되었는데요,
"코드 워리어"에 관련한 문서를 구할 수 있는곳도 알수 있을까요??
염치없이 계속 질문만 드리네요..^^
hongjuny님의 댓글
CodeWarrior 를 만드는 metrowerks 가 freescale 하고 합병을 한 것인지 합작을 하는 것인지, www.metrowerks.com 을 치면 요즘은 freescale 사이트로 들어가 버리더라고요.
<a href=http://www.freescale.com/webapp/sps/site/homepage.jsp?nodeId=012726 target=_blank>http://www.freescale.com/webapp/sps/site/homepage.jsp?nodeId=012726 </a>
혹시 이쪽 링크에서 래퍼런스 매뉴얼을 구할 수 있지 않을까 싶네요. ^^