|
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하여
: : : 그 순서대로 각 파일의 일부데이터를 합치고 싶습니다.
: : : 어떤 방법으로 해야하는지 도움부탁드립니다.
: : : 그리고, 몇개의 파일을 처리할 수 있는지도 알고싶습니다.
|