C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[41483] Re:다시 질문드릴게요.. ^^
유영인 Cuperido [cuperido] 927 읽음    2005-08-16 22:20
OpenDialog의 Files 프로퍼티에 선택된 파일 이름이 TStringList 형태로 들어갑니다.
또한, MemoryStream 을 사용하시려 한다면, MemoryStream에 로드한 후
Size 프로퍼티를 통해 파일 크기를 알 수 있습니다.

(단, 전체 파일이 일단 로드 된다는 점에서 fseek 등을 이용한 파일 크기 알아내는
방법과 차이가 있습니다. 즉, 파일 크기에 따라서 병합을 하지 않을 경우가 많아지면
메모리에 다 읽는 것 보다, 파일 크기만 단순 비교후 닫아버리는 fseek 방법이
더 좋겠습니다)

간단한 예제 첨부해 드립니다.


cuperido


//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{

int               itCount, itFilesize;
String            stFilename;
TMemoryStream     *msUnit = new TMemoryStream;

if(OpenDialog1->Execute()) {
   for(itCount = 0; itCount < OpenDialog1->Files->Count; itCount ++) {
     stFilename = OpenDialog1->Files->Strings[itCount];

     // 테스트 1, 파일 이름
     ShowMessage(stFilename);

     // 파일 로드
     msUnit->LoadFromFile(stFilename);
     itFilesize = msUnit->Size;

     // 이곳에서 병합 작업등을 하시면 됩니다.
     // .......

     // 테스트 2, 파일 사이즈
     ShowMessage(itFilesize);
   }
}


delete msUnit;

}
//---------------------------------------------------------------------------



즐겁게~ 님이 쓰신 글 :
: 오픈다이얼로그에서 하나의 파일을 선택해서 그 파일의 이름을 알 수 있는데요...
: 제가 하고 싶은 것은 오픈다이얼로그의 옵션 중 여러파일을 선택할 수 있는 옵션을
: "true"로 하고 여러 파일을 선택했는데, 이 때 선택한 파일들의 정보(이름, size...)를
: 알아내는 것입니다.
: 찾아본다고 찾아봤는데... 이것저것 메소드를 실행해봤는데...
: 잘 안되네요. ^^;;
: 도움주신 내용은 위의 내용이 해결되면, 잘 활용해보겠습니다.~
:
:
: 유영인  Cuperido 님이 쓰신 글 :
: : 스트림을 (MemoryStream 혹은 FileStream) 을 사용해 보시는 것이 좋을 것 같습니다.
: :
: : 1. 먼저 파일 용량을 알아내는 함수를 만든다 (fseek 도움말 example 을 보시면 예제에 나와있습니다)
: : 2. 배열을 만들어서 a.txt, b.txt 등을 정의하고, 각 용량을 알아낸다.
: : 3. 용량별로 sorting
: : 4. MemoryStream 을 만들어, 파일을 루프 하면서 원하는 부분을 편집
: :
: : 편집 하는 루틴의 예제는 다음과 같습니다.
: : 컴포넌트에서 제공하는 여러가지 메소드가 많으니 참고해 보세요.
: :
: :
: : cuperido
: :
: :
: : void __fastcall TForm1::FormCreate(TObject *Sender)
: : {
: :
: :  TMemoryStream     *msStream = new TMemoryStream;
: :  TMemoryStream     *msUnit = new TMemoryStream;
: :
: :
: :  // a.txt 를 읽음..
: :  msUnit->LoadFromFile("c:\\download\\a.txt");
: :
: :  // 스트림에 a.txt 의 내용을 밀어넣음
: :  msStream->WriteBuffer(msUnit->Memory, msUnit->Size);
: :
: :  // b.txt 를 읽음..
: :  msUnit->LoadFromFile("c:\\download\\b.txt");
: :
: :  // 스트림에 b.txt 의 내용을 3byte 이후로 부터 2 byte만 밀어넣음
: :  msStream->WriteBuffer((char *)msUnit->Memory + 3, 2);
: :
: :  // 스트림 내용 기록
: :  msStream->SaveToFile("C:\\Download\\Test.txt");
: :
: :  delete msUnit;
: :  delete msStream;
: :
: : }
: :
: :
: :
: : 즐겁게~ 님이 쓰신 글 :
: : : 예를들어 a.txt, b.txt ..... z.txt 파일이 있어,
: : : 이 파일을 하나의 파일로(abc.txt) 합치려고하는데요...
: : :
: : : 한번에 여러개의 파일을 열어서 파일명이나 파일용량으로 sort하여
: : : 그 순서대로 각 파일의 일부데이터를 합치고 싶습니다.
: : : 어떤 방법으로 해야하는지 도움부탁드립니다.
: : : 그리고, 몇개의 파일을 처리할 수 있는지도 알고싶습니다.

+ -

관련 글 리스트
41445 질문:여러개의 파일을 열어 파일명 또는 파일사이즈에 따라 편집하려면... 즐겁게~ 1175 2005/08/12
41468     Re:질문:여러개의 파일을 열어 파일명 또는 파일사이즈에 따라 편집하려면... 유영인 Cuperido 1045 2005/08/14
41475         다시 질문드릴게요.. ^^ 즐겁게~ 811 2005/08/16
41483             Re:다시 질문드릴게요.. ^^ 유영인 Cuperido 927 2005/08/16
41473         감사합니다. 즐겁게~ 664 2005/08/16
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.