※요약

rename : 파일 및 디렉토리의 이름을 변경한다.



※특징

이름 변경 말고도 파일을 이동할 때 사용할 수 있다.



※함수 원형 및 설명

int rename( const char *oldname, const char *newname );
//oldname : 파일 또는 디렉토리의 경로나 이름
//newname : 변경할 파일 또는 디렉토리의 이름
//반환값 : 성공 시 0, 실패 시 errno ( EACCES, ENOENT, EINVAL )



※예제

#include <stdio.h>
#include <direct.h>		//mkdir, rename

int main( )
{
	char strOldFolder[] = "d:\\TestOldFolder";
	char strNewFolder[] = "d:\\TestNewFolder";

	//테스트 폴더를 만든다.
	mkdir( strOldFolder );
	
	//이름을 바꾸고 결과를 리턴 받는다.
	int nResult = rename( strOldFolder, strNewFolder );

	if( nResult == 0 )
	{
		printf( "이름 변경 성공" );
	}
	else if( nResult == -1 )
	{
		perror( "이름 변경 실패 - " );
	}

	return 0;
}



※요약

_getdrive : 현재 작업 중인 드라이브를 구한다.



※함수 원형 및 설명

int _getdrive( );
//반환값 : A드라이브=1 ~ Z드라이브=26 일때 현재 드라이브 값



※예제 설명

아래 예제의 getdrive는 int형을 반환하지만 반환값이 1에서 26으로 정해져 있어 

char형 데이터 범위에 들어가므로 char형으로 변환해도 문제가 없다.

int형 데이터를 char형으로 명시적 형 변환을 해줘서 각 드라이브명을 출력하게 했다.

96을 더해준건 아스키 코드표를 보면 알 수 있다.



※예제

#include <stdio.h>
#include <direct.h>    //_getdrive

int main( )
{
	int nDrive = 0;

	nDrive = _getdrive( );

	printf( "현재 드라이브는 %c입니다.", char(nDrive)+96 );

	return 0;
}


※결과





※요약

chdir : 현재 작업 디렉토리를 변경한다.

change directory



※함수 원형 및 설명

int chdir( const char *dirname );
//dirname : 변경할 디렉토리의 경로
//반환값 : 정상 일 때 0, 에러 시 -1



※예제

#include <stdio.h>
#include <direct.h>	//chdirㅐ

#ifndef _MAX_PATH
#define _MAX_PATH 260
#endif

int main( )
{
	char strBuffer[_MAX_PATH] = { 0, };
	char strChangeDir[_MAX_PATH] = { "C:\\Windows" };

	int nResult = chdir( strChangeDir );

	if( nResult == 0 )
	{
		printf( "이동 성공" );
	}
	else if( nResult == -1 )
	{
		perror( "이동 실패 - " );
	}

	return 0;
}





※요약

getcwd : 현재 작업 중인 디렉토리의 경로를 얻는다.



※특징

버퍼가 작으면 에러가 발생할 수 있으므로 크게 잡는다.



※함수 원형 및 설명

char *getcwd( char *buffer, int maxlen );
//buffer : 파일의 경로
//maxlen : 파일에 설정할 접근 모드 값
//반환값 : 정상 일 때 0, 에러 시 -1



※예제

#include <stdio.h>
#include <direct.h>	//getcwd

#ifndef _MAX_PATH
#define _MAX_PATH 260
#endif

int main( )
{
	char strBuffer[_MAX_PATH] = { 0, };
	char *pstrBuffer = NULL;

	pstrBuffer = getcwd( strBuffer, _MAX_PATH );

	return 0;
}




※요약

chmod : 파일이나 디렉토리의 읽기/쓰기 접근 권한을 변경한다.

change mode



※특징

pmode 값은 _S_IREAD와 _S_IWRITE 값만 사용한다.



※함수 원형 및 설명

int chmod( const char *filename, int pmode );
//filename : 파일의 경로
//pmode : 파일에 설정할 접근 모드 값
//반환값 : 정상 일 때 0, 에러 시 -1

접근 권한

설 명

비 고

_S_IREAD

읽기 접근 권한

-

_S_IWRITE

쓰기 접근 권한

_S_IREAD 속성 해제



※예제

#include <stdio.h>
#include <sys⁄stat.h>    //_S_IREAD, _S_IWRITE
#include <io.h>          //chmod

int main( )
{
	char strPath[] = { "D:\\Text.txt" };
	
	int nResult = chmod( strPath, _S_IREAD );

	if( nResult == 0 )
	{
		printf( "읽기 전용으로 속성 변경 성공" );
	}
	else if( nResult == -1 )
	{
		perror( "실패 - " );
	}

	return 0;
}





※요약

mkdir : 디렉토리(폴더)를 생성한다.

make directory


※특징

만들려는 폴더가 이미 존재하면 errno는 EEXIST,

폴더가 부정확하면 errno는 ENOENT


※함수 원형 및 설명

int mkdir( const char *dirname );
//dirname : 생성할 디렉토리 경로와 이름
//반환값 : 정상 일 때 0, 에러 시 -1



※예제

#include <stdio.h>
#include <direct.h>		//mkdir
#include <errno.h>		//errno

int main( )
{
	char strFolderPath[] = { "D:\\CreateFolder" };
	
	int nResult = mkdir( strFolderPath );

	if( nResult == 0 )
	{
		printf( "폴더 생성 성공" );
	}
	else if( nResult == -1 )
	{
		perror( "폴더 생성 실패 - 폴더가 이미 있거나 부정확함\n" );
		printf( "errorno : %d", errno );
	}

	return 0;
}





※요약

rmdir : 디렉토리(폴더)를 삭제한다.



※특징

디렉토리 내에 파일이 존재하거나 사용중이면 삭제할 수 없다.

삭제 전에 디렉토리의 존재 유무 확인 후 삭제하면 좋다.



※함수 원형 및 설명

int rmdir( const char *dirname );
//dirname : 삭제할 디렉토리 경로
//반환값 : 정상 일 때 0, 에러 시 -1



※예제

#include <stdio.h>
#include <direct.h>		//rmdir
#include <errno.h>		//errno

int main( )
{
	char strFolderPath[] = { "D:\\TestFolder2" };
	
	int nResult = rmdir( strFolderPath );

	if( nResult == 0 )
	{
		printf( "폴더 삭제 성공" );
	}
	else if( nResult == -1 )
	{
		perror( "폴더 삭제 실패 - 폴더 안에 파일이 있거나 사용중\n" );
		printf( "errorno : %d", errno );
	}

	return 0;
}





※요약

remove : 지정한 경로의 파일을 삭제한다.



※특징

읽기 전용, 숨김, 시스템 속성 등을 갖는 파일은 삭제할 수 없다.

또 현재 사용 중인 파일도 삭제할 수 없다.



※함수 원형 및 설명

int remove( const char *path );
//path : 파일 경로
//반환값 : 정상 일 때 0, 에러 시 -1



※예제

#include <stdio.h>

int main( )
{
	char strPath[] = { "D:\\Text2.txt" };
	
	int nResult = remove( strPath );

	if( nResult == 0 )
	{
		printf( "파일 삭제 성공" );
	}
	else if( nResult == -1 )
	{
		perror( "파일 삭제 실패" );
	}

	return 0;
}




※요약

access : 파일이나 디렉토리(폴더)의 존재 유무, 혹은 파일의 권한 및 속성을 조사할 때 사용한다.



※특징

주로 파일 및 디렉토리가 존재하는 지 조사할때 사용한다.



※함수 원형 및 설명

int access( const char *path, int mode );
//path : 파일이나 폴더의 전체 경로 또는 이름
//mode : 파일이나 폴더의 존재 유무 검사 또는 권한 조사(아래 표 참고)
//반환값 : 정상 시 0, 에러 시 -1



모드 설명

모 드

설 명

00

파일 및 디렉토리가 존재 하는지 조사

02

쓰기 접근이 허용되는지 조사

04

읽기 접근이 허용되는지 조사

06

읽기 및 쓰기가 허용되는지 조사




※예제

#include <stdio.h>
#include <io.h>		//access

int main( )
{
	char strPath[] = { "C:\\Windows" };
	
	int nResult = access( strPath, 0 );

	if( nResult == 0 )
	{
		printf( "지정한 경로에 파일⁄폴더가 존재 합니다." );
	}
	else if( nResult == -1 )
	{
		printf( "지정한 경로에 파일⁄폴더가 존재하지 않습니다." );
	}

	return 0;
}




※요약

유니코드 타입의 한글 문자열을 출력하려고 하면 깨지거나 ??? 등, 제대로 나오지 않는 문제점들이 있다.



원인

네이버 지식인 참고



※해결방법

locale.h                                            //헤더를 추가


_wsetlocale( LC_ALL, L"korean" );      //지역화 설정을 전역적으로 적용

wcout.imbue( locale("korean") );        //출력시 부분적 적용

wcin.imbue( locale("korean") );          //입력시 부분적 적용


만일 한 프로그램에 여러 언어를 출력해야 한다면 그때그때 설정을 바꿔준다.



※예제

#include <stdio.h>
#include <locale.h>

int main( )
{
	_wsetlocale( LC_ALL, L"korean" );

	FILE *pFile = NULL;

	pFile = _wfopen( L"d:\\Text.txt", L"w"  );
	if( pFile == NULL )
	{
		//에러 처리
	}
	else
	{
		for( int i=0 ; i<3 ; ++i )
		{
			fwprintf( pFile, L"%d %f %s \n", i, 0.5+i, L"한글" );
			fwprintf( pFile, L"%d, %f, %s \n", i, 0.5+i, L"확인" );
			fwprintf( pFile, L"%d\t%f\t%s \n", i, 0.5+i, L"유니코드" );
		}
		fclose( pFile );
	}

	return 0;
}



※결과

한글이 깨진다.


설정 후에는 제대로 나온다.


+ Recent posts