연재 완료/C Lang 예제코드 모음

12. clang_ex_FileIO1

라이피 (Lypi) 2019. 4. 8. 10:13
반응형
#include 
#include 
#include 


//파일을 읽어들여 16진수와 문자로 출력한다.
void DrawHexAscii(char* file) 
{
	unsigned char munja[10];
	FILE* fp;
	int i, j, n = 0;

	fopen_s(&fp, file, "rb");
	if (fp == NULL)
	{
		puts("파일이 존재하지 않습니다. \n");
		return;
	}

	while (!feof(fp)) {
		printf("\n%05d : ", ftell(fp));
		for (i = 0; i < 10; i++) {
			munja[i] = fgetc(fp);
			printf("%02X", munja[i]);
			if (feof(fp)) { break; }
		}
		printf("  ");

		for (j = 0; j < i; j++) {
			if (munja[j] == '\t' || munja[j] == '\n' || munja[j] == '\r') {
				munja[j] = '.';
			}
			putchar(munja[j]);
		}
		n++;
		if (n % 20 == 0) {
			puts("\n<아무키나 누르세요>\n");
			_getch();
		}
	}
}

//파일을 로딩하여 역순으로 출력한다.

void DrawInverse(char* file)
{
	FILE* fp;

	fopen_s(&fp, file, "rb");
	if (fp == NULL)
	{
		puts("파일이 존재하지 않습니다. \n");
		return;
	}

	fseek(fp, 0, SEEK_END);
	int iSize = ftell(fp);
	printf("%d 바이트입니다.\n", iSize);
	fseek(fp, 0, SEEK_SET);

	int n = 0;

	do {
		char* munja = 0;
		munja = (char*)calloc(256, sizeof(char));

		int i, j;

		for (i = 0; i < 256; i++) {
			if (!feof(fp)) {
				munja[i] = fgetc(fp);
			}
			else {
				free(munja);
				return;
			}

			//int iCnt = fseek(fp, 2, SEEK_CUR);
			if (munja[i] == '\n' || ftell(fp) <= 0) {
				break;
			}
		}
		for (j = i; j > 0; j--) {
			putchar(munja[j]);
		}
		n++;
		free(munja);

		if (n % 20 == 0) {
			puts("\n<아무키나 누르세요>\n");
			_getch();
		}

	} while (!feof(fp));
}

int main(int argc, char* argv[])
{
	if (argc != 3) {
		printf("\n 사용법 : fileIO_1.exe FilePath 0(inverse) or 1(Hex) \n");
		return 0;
	}

	int iValue = atoi(argv[2]);
	if (iValue == 1) {
		DrawHexAscii(argv[1]);
	}
	else {
		DrawInverse(argv[1]);
	}

}
반응형