2017-02-27 3 views
0

가능한 한 많은 파일이있을 수 있지만 적어도 하나는 있어야합니다. "실행 파일 이름" "플래그" "파일 이름" "파일 ..."입니다. 명령 줄에서 몇 개의 파일이 제공되는지 어떻게 알 수 있습니까? 나는 루프를 사용해야한다는 것을 알고있다. 그런 다음 얼마나 많은 파일이 있는지 알아 내면 각 파일을 열고 각 파일을 통해 fread하여 모든 파일을 보관 파일에 저장하는 방법은 무엇입니까? 아카이브 파일은 바이너리입니다. 맞습니까? 얼마나 많은 파일이 나에게 주어 졌는지, 각 파일의 이름, 각 파일의 이름, 각 파일의 크기, 그리고 각 파일의 내용을 기록한 다음 모든 파일을 보관 파일에 저장해야합니다. 없음 압축아카이버 실행 파일과 그 일부를 생성하는 것은 명령 줄 인수에서 주어진 파일을 보관하는 것입니다.

+1

'argc'는'argv' (argv [0]'의 실행 파일 이름 포함)에있는 요소의 총 개수입니다. 그래서'argc-3 '은 입력 파일의 수입니다. – Barmar

+1

기존 아카이브 형식 표준을 따르고 있습니까? 아니면 자신 만의 아카이브 형식을 만들 수 있습니까? 메인 프로그램에'int main (int argc, char ** argv)'이 있다고 가정하고,'argc'의 인자가 얼마나 많은 지 알 것입니다. 얼마나 많은 파일이 있는지 찾기 위해 루프가 필요하지 않습니다. 파일 목록을 반복 할 때 루프가 필요합니다. 아카이브에 중앙 집중식 사전이나 분산 사전이 있습니까? 파일 상단에 모든 파일 크기 및 이름 (및 아카이브 위치) 정보를 기록합니까, 아니면 아카이브의 각 파일 앞에 정보가 있습니까? –

+0

예 int int (int argc, char ** argv), 오 그래, 터미널이 자동으로 argc의 값을 알고 있습니까? 그리고 argc에 얼마나 많은 값이 있는지에 따라 각 파일을 반복하는 방법은 무엇입니까? 그러나 파일은 argv [3]까지 나열되어 있지 않으므로 파일을 통해서만 루핑하고 아카이브 파일을 열고 작성하는 방법을 어떻게 알 수 있습니까? 그 루프는 어떻게 생겼을까요? – melb27

답변

0
char *filenames[argc-3]; 
for(i = 3; i < argc; i++) 
{ 
    filenames[i-3] = argv[i]; 
    printf("Files = %s\n", filenames 
} 

그래서 그 루프는 "실행" "플래그"제외 얼마나 많은는 argc 인수를 알 수 없다 "아카이브 이름입니다." 그 다음에는 argc에 얼마나 많은 파일이있을 것인가. 그리고 나서 파일 이름 []은 파일을 명령 행 인자에 저장합니다, 맞습니까? 그러면 배열을 반복하고 각 파일을 열고 내가 말하는 다른 함수로 크기를 결정하는 방법은 무엇입니까?