특정 파일에서 특정 문자열을 찾는 프로그램, 리다이렉션 시 처리방법
VanilLa
질문 제목 : 특정 파일에서 특정 문자열을 찾는 프로그램, 리다이렉션 시 처리방법□ 프로그램 수행방법
-. FindFunc.exe [파일명] [찾을문자열]□ 문제점
-. FindFunc.exe *.* [찾을문자열] test.txt 방식으로 수행 시, 비정상 루프 발생됨.
-. 특정 문자열을 찾은 결과 값인 test.txt 파일을 읽어들여서, 또 다시 결과 값을 test.txt 파일로 저장하는 동작을 반복□ 질문사항
-. 위와 같이 리다이렉션 수행시에도 test.txt 파일을 읽어들이지 않고 무시하는 방법질문 내용 :
안녕하세요.
위에 질문 요약에서와 같이, 파일명을 *.* 로 입력하여 리다이렉션을 수행하면
결과파일을 읽어들여서, 또 결과를 적는 방식의 비정상 루프가 발생됩니다.리다이렉션을 하더라도, 결과 파일을 읽어들이지 않는 방법에 어떤 것이 있을까요?
아래 소스코드를 참조하시고, 많은 조언 부탁드립니다. ^ ^ 소스 코드 #include stdio.h#include dir.h#include stdlib.h#include string.h#include windows.h
#define MIN 3 // 최소 필요한 인자의 갯수#define BUF 500 // 문자열 버퍼의 크기
int search_func(char *str, char *search); // 문자열을 찾아서 출력하는 함수
int main(int argc, char **argv){ int name_num = argc-2; // 읽어들인 파일의 갯수를 저장하는 변수 : 프로그램명, 찾을 문자열을 제외한 argc 수 int string = argc-1; // 찾을 문자열 int i; // argv[i] 형식으로 접근하기 위한 변수 if(argc MIN) { printf(FindFunc.exe [파일명] [찾을단어] 형식으로 입력하세요!\n); return -1; } for(i=1; i=name_num; i++) { search_func(argv[i], argv[string]); Sleep(1); // 루프를 조금 천천히 돌게 하기 위해서 넣은 딜레이 } return 0;}
int search_func(char *str, char *search){ char buffer[BUF]; FILE *fp; fp = fopen(str, r); if(fp == NULL) { printf(파일을 열 수 없습니다. \n); printf(에러파일 : %s\n\n, str); return -1; } while(fgets(buffer, BUF, fp)) { if(strstr((const char *)buffer, (const char *)search)) printf(%s // %s, str, buffer); } fclose(fp); return 0;}