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
[19386] Re:[질문] 하느리님...이것좀 봐주세요...
하느리 [] 1050 읽음    2002-06-14 17:42
흠날리...

SaveDialog->Execute () 이 함수는 사용자의 선택에 따라서 파일을 선택하면 true, 선택하지 않으면 false를 되돌려 주는 함수입니다. 그리고, SaveDialog가 열릴 때, 기본 디렉토리를 설정할 수 있습니다. InitialDir라는 속성을 이용하면 됩니다.
제가 함 바꿔보면,
String path = ExtractFilePath (ParamStr (0)) + (String)"Data";
if (!DirectoryExists(path))   //디렉토리가 없으면...
{
    if ( ! CreateDir (path) )      // 디렉토리를 만들고...
    {
        throw Exception("Cannot create directory.");
        return;
    }
}

SaveDialog1->InitialDir = path;
if ( SaveDialog1->Execute () )
{
    ExcelFile = SaveDialog1->FileName;   // 파일이름을 가지고 와서..
    //엑셀로 변환
    SMExportToXLS3->FileName = ChangeFileExt(AnsiString(ExcelFile), ".xls"); 
    SMExportToXLS3->Execute();
    ModalResult = mrOk;
}
이렇게 하시면 될 거구요. 그런데, 생각하셔야 할 것은 SaveDialog->FileName에는 파일명만 존재하는 것이 아닙니다. 절대패스+파일명 형태로 되어 있어요. 그래서 사용자가 SaveDialog1->InitialDir에서 지정한 디렉토리 이외의 디렉토리를 선택하였다면 당연히 다른 디렉토리에 저장되겠죠.
근데, 이것도 싫다면은 (디렉토리를 변경못하게 하고자 한다면)
SaveDialog1->InitialDir = path;
SaveDialog1->Options << ofNoChangeDir;
if ( SaveDialog1->Execute () )
...

하시면 됩니다.


       



처리 님이 쓰신 글 :
: 다름이 아니라...아래와 같이 알려주는 방식을로 코딩을 했거든요..
: 저가 봐도 별 문제 없는데...
: 문제점은 다음과 같습니다...
:
: 지정한 위치(원하는 위치에...DATA 라는 폴더를 만들고..거기에 저장하기 원함)에 폴더를 만들고
: 엑셀 파일 형태로 바꾸어주는 작업을 한 다음에..
: 저장을 하는데....(C:\Program Files\Application_name\DATA) 형태로..저장하는데..
: 이게...세이브 다이얼로그 박스가 뜨는데....처음 경로가...[내 문서]로 잡혀 있고..
: 여기서..저장을 하면....(이때까지..내가 원하는 경로에..DATA..라는 폴더가 안만들어지고..)
: [내 문서]에 엑셀파일로 저장은 되고...저장 한 다음에...DATA 폴더가 만들어집니다..
: 이 같은 경우는 어떻게 해야하나요.?????
: 참고로...제 PC(win2000)에서는 잘되거든요...근데...다른 PC에서(윈도우98)에서는 위와 같은 경우가
: 생기더군요....
: 저가 만든 부분의 소스는 다음과 같습니다..
: ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
: void __fastcall TForm4::Button2Click(TObject *Sender)
: {
:      AnsiString ExcelFile;
:
:     // String path = ExtractFilePath (Application->ExeName) + (String)"Data";
:        String path = ExtractFilePath (ParamStr (0)) + (String)"Data";
:     // ShowMessage(path);
:
:      if (!DirectoryExists(path))   //디렉토리가 없으면...
:      {
:           if(CreateDir(path))      // 디렉토리를 만들고...
:           {
:            
:             SaveDialog1->Execute();   // 세이브 다이얼 로그 박스가 뜬다음..
:             ExcelFile = SaveDialog1->FileName;   // 파일이름을 가지고 와서..
:             //엑셀로 변환
:             SMExportToXLS3->FileName = ChangeFileExt(AnsiString(ExcelFile), ".xls"); 
:             SMExportToXLS3->Execute();
:             ModalResult = mrOk;
:           }
:           else
:              throw Exception("Cannot create directory.");
:      }
:      else
:      {
:           SaveDialog1->Execute();
:           ExcelFile = SaveDialog1->FileName;
:           SMExportToXLS3->FileName = ChangeFileExt(AnsiString(ExcelFile), ".xls");
:           SMExportToXLS3->Execute();
:           ModalResult = mrOk;
:      }
: }
: +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
: 동작은 잘하는데....폴더를 만들고, 저장하는 경로가 문제 입니다..
: 부탁드립니다...
: 수고하세요..
:
: ======================================================================================
: 일반적으로 프로그램 소스 내에서는 절대 경로를 사용합니다.
: 프로그램이 실행된 path를 찾을려면 여러가지가 많은데
: String path = ExtractFilePath (Application->ExeName) + (String)"Data";
: // 혹은 String path = ExtractFilePath (ParamStr (0)) + (String)"Data";
: if (!DirectoryExists(path))
:         {
:                if(!CreateDir(path))
:                     throw Exception("Cannot create directory.");
:
:                // 저장하기 작업이 일어남
:         }
:         else
:         {
:                // 저장하기 작업이 일어남
:         }
:
:
: 처리 님이 쓰신 글 :
: : 다음의 코드와 같이.....인스톨을 한 다음...만약에....
: : 폴더가 없으면...그 프로그램의 서브로 디렉토리를 만드는 방법...인데..
: : 코드는...
: :
: : ===================================================================================
: : if (!DirectoryExists("..\\DATA"))
: :         {
: :                if(!CreateDir(".\\DATA"))
: :                     throw Exception("Cannot create directory.");
: :
: :                // 저장하기 작업이 일어남
: :         }
: :         else
: :         {
: :                // 저장하기 작업이 일어남
: :         }
: : =========================================================================================
: :
: : 그런데...문제는
: :
: : if(!CreateDir(".\\DATA")) 이부분인데....
: :
: : 만약에..내가 인스톨을 해서....C:\Program Files\Application_name   이라는 곳에 프로그램이
: : 깔렸는데.....Application_name의 하위로...DATA라는 폴더가 없으면...이 폴더를 만들고...
: : 있으면...그 곳에 저장하고자 합니다....
: :
: : 그런데...저가 코딩한 PC에서는 되거든요..
: : 근데...인스톨 시디를 만들어서....셋업한 후에.....이 기능을 할려고 하니...까...
: : Cannot create directory.........라는 메시지가 나오더군요...
: : 이것을 해결할 방법좀...부탁드립니다....
: : 꾸벅~~~
: :
: :
:

+ -

관련 글 리스트
19345 [질문] 하느리님...이것좀 봐주세요... 처리 772 2002/06/14
19386     Re:[질문] 하느리님...이것좀 봐주세요... 하느리 1050 2002/06/14
19388         하느리님 고맙습니다. 처리 645 2002/06/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.