|
흠날리...
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.........라는 메시지가 나오더군요...
: : 이것을 해결할 방법좀...부탁드립니다....
: : 꾸벅~~~
: :
: :
:
|