※요약

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;
}



※결과

한글이 깨진다.


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





※요약

ferror : 개방된 파일에서 데이터 조작시 에러가 발생되었는지 조사

feof : 개방된 파일에서 파일의 끝을 조사



※함수 원형 및 설명

int ferror( FILE *stream );
//stream : 개방된 FILE 구조체의 포인터
//반환값 : 에러가 발생했으면 true, 아니면 false

int feof( FILE *stream );
//stream : 개방된 FILE 구조체의 포인터
//반환값 : 파일의 끝이면 true, 끝이 아니면 false



※예제

#include <stdio.h>

#define print(ch) printf( "%x %c\n", ch, ch )

int main( )
{	
	FILE *pFile = NULL;

	pFile = fopen( "d:\\Text.txt", "r" );
	if( pFile == NULL )
	{
		//에러 처리
	}
	else
	{
		char chTemp;

		while( !feof( pFile ) )
		{
			chTemp = fgetc( pFile );

			if( ferror(pFile) )
			{
				printf("읽기 에러");
				break;
			}

			print( chTemp );
		}

		fclose( pFile );
	}

	return 0;
}




※요약

fgetpos : 개방된 파일에서 파일 포인터의 위치를 얻는다.

fsetpos : 개방된 파일에서 파일 포인터의 위치를 설정한다.



※함수 원형 및 설명

int fgetpos( FILE *stream, fpos_t *pos );
//stream : 개방된 FILE 구조체의 포인터
//pos : 현재 파일 포인터를 읽어올 변수
//반환값 : 성공 시 0, 실패 시 0이 아닌 값

int fsetpos( FILE *stream, const fpos_t *pos );
//stream : 개방된 FILE 구조체의 포인터
//pos : 파일 포인터 위치를 설정할 값
//반환값 : 성공 시 0, 실패 시 0이 아닌 값


※예제

#include <stdio.h>

#define print(n) printf( "%lld\n", n )

int main( )
{	
	FILE *pFile = NULL;

	pFile = fopen( "d:\\Text.txt", "w+" );
	if( pFile == NULL )
	{
		//에러 처리
	}
	else
	{
		fpos_t pos;
		print( ftell(pFile) );			//fopen 후 파일 포인터 위치 확인

		fputs( "0123456789", pFile );
		fgetpos( pFile, &pos );
		print( pos );					//fputs 후 파일 포인터 위치 확인

		pos = 5;
		fsetpos( pFile, &pos );
		
		fgetpos( pFile, &pos );
		print( pos );					//fsetpos 후 파일 포인터 위치 확인

		fclose( pFile );
	}

	return 0;
}



+ Recent posts