|
400개의 file을 저장하려는데...
File을 열었다가(fopen) 닫는(fclose)동작은 파일하나에 1240번씩 반복하네요
같은파일에 한번 열때 1Byte밖에 쓰지 않고..
또 400개 파일이 아니라 401개 네요
총 401*1240번 파일을 열었다 닫았다를 반복하네요
개선은?
1) 하나의 파일은 한번만 open해서 모두 쓰고 난후에 close하세요
(두번째 for문 안에있는 fopen과 fclose를 for문 밖으로..)
2) 추가로..
pArray에 데이타는 모두 같은 데이타 인데..
파일이름만 바꿔서 쓰고있네요
파일에 쓸때마다 매번 fprintf로 쓰지 말고
for문 밖에서 pArray에 내용을 모두 변환해둔후에 ...
한번에 쓰는것이 훨씬 효율적일것입니다.
또는 파일하나 만들어두고 이름만 바꿔서 복사할수도 있구요
그럼..
프뉴마 님이 쓰신 글 :
: void __fastcall TForm1::Button3Click(TObject *Sender) //tmp 파일 분할 출력
: {
: int DataSize = 1240;
: int scanPts = 401;
: //data type = short(2byte)
:
:
: short *pArray = new short [DataSize*scanPts];
:
:
: FILE *infile = fopen("d:\\test1.tmp","rb");
:
: fseek(infile, 54806, SEEK_SET);
:
: fread(pArray, sizeof(short), (DataSize*scanPts), infile);
:
: fclose(infile);
:
:
: for(int i=0; i < scanPts; i++)
: {
: AnsiString FileName = "d:\\test\\test1_no.";
:
: AnsiString TmpFileName = (FileName + IntToStr(i) + ".tmp");
:
:
: for(int j=0; j < DataSize; j++)
: {
: FILE *OutFile = fopen(TmpFileName.c_str(), "wb");
:
: fprintf(OutFile, "%hd ", pArray[(i*DataSize) + j]);
:
: fclose(OutFile);
: }
: }
:
:
:
: delete [] pArray;
: }
:
: 코드는 이렇습니다. test1tmp를 읽어들여서 일정크기만큼 분할해서 출력하는 코드인데요.
:
: 제가 초보인지라 스레드는 모르고...이렇게 출력하다보니 400개의 파일을 출력하는데 시간이 꽤 오래 걸리더군요. 출력 중엔
:
: 프로그램을 사용할 수 없으니 답답하기도 하구요.
:
: 아직은 기초적인 함수밖에 사용할 줄 몰라서요....좀 더 출력 속도를 높일 수 있는 방법은 없을까요?
|