[ Nexacro.Etc -  파일관리 ]

 

 


/*******************************************************************************
 ★ 설명
    File Path 문자열(예 : C:\a\b\filename.ext)에서 File명(예 : filename)을 추출
 ★ Parameter
    1. sPath   : File Path 문자열 (예 : "C:\a\b\filename.ext")
    2. bExt    : extend를 return되는 File명에 포함시킬지 여부 ( 옵션 : Default=false )
                 - true : extend를 File명에 포함시킴
                 - false : extend를 File명에 포함시키지 않음
 ★ return
    - 성공 =
  - bExt = true인 경우 ==> sPath에서 File명(예 : "filename.ext")
  - bExt = false인 경우 ==> sPath에서 File명(예 : "filename")
 - 실패 = ""
 ******************************************************************************/

function fn_GetFileName( sPath, bExt )

{

 var start_pos, end_pos, tmp_pos, filename;

 

 if( fn_IsNull(sPath) )  return "";

 if( fn_IsNull(bExt) )

  bExt = false;

 

 start_pos = Math.max(PosReverse( sPath, "\\" ),

      PosReverse( sPath, "/" ));

    tmp_pos = PosReverse( sPath, "::");

 if( tmp_pos > 0 ) tmp_pos++;

 start_pos = Math.max( start_pos, tmp_pos );

 if( bExt == false )

 {

  end_pos = PosReverse( sPath, "." );

  if( end_pos < 0 )

   end_pos = sPath.length;

  filename = sPath.substr( start_pos+1, end_pos-start_pos-1 );

 }

 else

 {

  filename = sPath.substr( start_pos+1 );

 }

  

 return filename;

}

 

/*******************************************************************************
 ★ 설명
    File Path 문자열(예 : C:\a\b\filename.ext)에서 확장자(예 : ext)을 추출
 ★ Parameter
    1. sPath   : File Path 문자열 (예 : "C:\a\b\filename.ext")
 ★ return
    - 성공 = sPath에서 확장자(예 : "ext") (단, "."이 없으면 "" return됨)
    - 실패 = ""
 ******************************************************************************/

function fn_GetFileExt( sPath )

{

 var pos;

 

 if( fn_IsNull( sPath ) ) return "";

 

 pos = PosReverse( sPath, "." );

 if( pos < 0 )

  return "";

 else

  return sPath.substr( pos+1 );

}

 

/*******************************************************************************
 ★ 설명
    sPath 문자열(예 : C:\a\b\filename.ext)에서 Path(예 : C:\a\b\)를 추출
 ★ Parameter
    1. sPath   : Path 문자열 (예 : "C:\a\b\filename.ext")
 ★ return
    - 성공 = sPath에서 Path(예 : "C:\a\b\")
    - 실패 = ""
 ******************************************************************************/

function fn_GetFilePath( sPath )

{

 var filename;

 

 if( fn_IsNull(sPath) )  return "";

 

 filename = GetFileName( sPath, true );

 if( filename == null )  return null;

 

 return sPath.substr(0, sPath.length - filename.length);

}

 

/*******************************************************************************
 ★ 설명
    화면내에서 자기 자신화면의 Url을 얻어온다.
 ★ Parameter
    없음
 ★ return
    - 성공 = 자기 자신화면의 Url ( 절대경로 또는 Service::a.xfdl 형태로 return됨 )
    - 실패 = ""
 ******************************************************************************/

function fn_GetThisUrl()

{

 var this_url, parent_type;

 

 // Division, Tab, PopupDiv인 경우에는 따로 처리해야 함

 parent_type = GetObjType(parent);

 if( parent_type == "Div" || parent_type == "PopupDiv" || parent_type == "TabPage" )

  this_url = parent.url;

 else

  this_url = this.getOwnerFrame().formurl;

  

 return this_url;

}

 

/*******************************************************************************
 ★ 설명
    현재 실행되고 있는 Project의 Root Full Path를 얻어온다.
 ★ Parameter
    없음
 ★ return
    - 성공 = 현재 실행되고 있는 Project의 Root Full Path
    - 실패 = ""
 ★ 참고사항
    현재 실행되고 있는 ADL Path는 application.xadl을 통해 얻을 수 있다.
 ★ 목적
    Tool에서 system.execXPlatform을 하면 Project경로를 알수 없어 실행이 힘들기
    때문에 만들었다.
 ★ BUG
    모든 화면 Service는 Project내의 바로 한단계 아래의 Sub Directory이고
    ADL은 Project Directory에 있다는 전제하에 만들어 졌다.
    즉, Project=C:\A\, ADL=C:\A\ADL.xadl, Service=C:\A\Service\라는 가정하에
    만들어졌다.
 ******************************************************************************/

function fn_GetProjectPath()

{

 var cur_xadl, filename, project_path;

 

 cur_xadl = application.xadl;

 if( fn_IsNull(cur_xadl) ) return "";

 

 filename = GetFileName(cur_xadl, true);

 if( fn_IsNull(filename) ) return "";

 

 // QuickView로 돌린 경우

 if( filename == "empty_adl.xadl" )

 {

  var this_url, pos;

  

  this_url = Replace( childframe.formurl, "\\", "/" );

  pos = PosReverse( this_url, "/");

  if( pos < 0 )

   return "";

  pos = PosReverse( this_url, "/", pos-1);

  if( pos < 0 )

   return "";

 

  project_path = childframe.formurl.substr(0, pos+1);

 }

 // Launch Project로 돌린 경우

 else

 {

  var trim_path;

  project_path = GetFilePath(application.xadl);

  trim_path = LTrim(project_path, "file://");

  if( trim_path != project_path )

   project_path = Replace( trim_path, "/", "\\" );

 }

 

 return project_path;

}

 

/*******************************************************************************
 ★ 설명
     ADL을 주고 XPlatform실행하는 함수
 ★ parameter
    1. sADL : ADL
       1) Full Path지정한 경우 (예 : C:\\Project\\ADL.xadl")
          Full Path에 해당하는 ADL실행
              2) ADL명만(확장자제외) 지정한 경우 ( 예 : "ADL" )
                 Project Path내의 ADL실행
              ※ 단, 경로에 대한 유효성 여부는 검사하지 않음
    2. sKey : XPlatform실행시 Key
              (옵션 : Default = ADL명(단, 확장자제외))
 ★ return
    - 성공 = true
    - 실패 = false
 ★ 주의사항
    XPLatform실행시 Argument를 전달할 방법은 못 찾겠다.
 ★ 목적    
    PC에서 Tool로 작업시 Project Path를 모를 경우 XPlatform실행이 어려워서 만들었음
 ******************************************************************************/

function fn_RunXP(sADL, sKey)

{

 var adl_name;

 var project_path;

 var oChildFrame_SDI;

 

 if( fn_IsNull(sADL) )  return false;

 

 adl_name = GetFileName(sADL);

 if( fn_IsNull(sKey) )  sKey = adl_name;

 

 // FullPath로 지정한 경우

 if( adl_name != sADL )

  system.execXPlatform(" -X \"" + sADL + "\" -K " + sKey);

 // ADL명만 지정한 경우

 else

 {

  project_path = GetProjectPath();

  if( fn_IsNull(project_path) )

   return false;

  else

   system.execXPlatform(" -X \"" + project_path + sADL + ".xadl" + "\" -K " + sKey);

 }

  

 return true;

}

 

/*******************************************************************************
 ★ 설명
     XPLATFORM에서 정의된 Path예약어와 실제경로 목록을 얻어오는 함수
 ★ parameter
 ★ return
    2차원 Array = {{alias 1, 실제경로 1}, {alias 2, 실제경로 2},...}
 ******************************************************************************/

function fn_GetPathAliasList()

{

 var aList = new Array();

 

 var tmp = new Array();

 tmp[0] = "%USERAPP%";  tmp[1] = system.convertRealPath(tmp[0]);

 aList[0] = tmp;

 

 var tmp = new Array();

 tmp[0] = "%MYDOCUMENT%"; tmp[1] = system.convertRealPath(tmp[0]);

 aList[1] = tmp;

 

 var tmp = new Array();  

 tmp[0] = "%INSTALLROOT%"; tmp[1] = system.convertRealPath(tmp[0]);

 aList[2] = tmp;

 

 var tmp = new Array();  

 tmp[0] = "%XPLATFORM%"; tmp[1] = system.convertRealPath(tmp[0]);

 aList[3] = tmp;

 

 var tmp = new Array();  

 tmp[0] = "%COMPONENT%"; tmp[1] = system.convertRealPath(tmp[0]);

 aList[4] = tmp;

 

 var tmp = new Array();  

 tmp[0] = "%THEME%";  tmp[1] = system.convertRealPath(tmp[0]);

 aList[5] = tmp;

 

 var tmp = new Array();  

 tmp[0] = "%CACHE%";  tmp[1] = system.convertRealPath(tmp[0]);

 aList[6] = tmp;

 

 return aList;

}

/*******************************************************************************
 ★ 설명
    sPath에 해당하는 모든 하위 디렉토리에 대하여
    File 및 Directory 리스트를 가져와서 oDataset에 담는다.
 ★ Parameter
    1. sPath    : 리스트를 가져올 Path = 절대 Path로 줄 것
    2. oDataset : 리스트를 담을 Dataset Object
                  Column = level, dir, file, size, fgbn
                  ( Column이 없으면 만들어 줌 )
                  ( fgbn = 파일 구분 : "d" = 디렉토리, "f" = 파일 )
    3. _level   : 내부적으로 재귀호출시에만 사용함, 사용치 말것
 ★ return
    - 실패 = false
    - 성공 = true
 *****************************************************************************/

function FILEGetFileList(sPath, oDataset, _level)

{

 var flist, i;

 

 if( fn_IsNull(sPath) || fn_IsNull(oDataset) )

  return false;

 if( fn_IsNull(_level) )

 {

  _level = 0;

  

  // Column있는지 체크하고 만들기

  if( oDataset.getColumnInfo( "level" ) == null )

   oDataset.addColumn("level", "string");

  if( oDataset.getColumnInfo( "dir" ) == null )

   oDataset.addColumn("dir", "string");

  if( oDataset.getColumnInfo( "file" ) == null )

   oDataset.addColumn("file", "string");

  if( oDataset.getColumnInfo( "size" ) == null )

   oDataset.addColumn("size", "string");

  if( oDataset.getColumnInfo( "fgbn" ) == null )

   oDataset.addColumn("fgbn", "string");

  

  oDataset.clearData();  

 }

 

 flist = VirtualFile.getFileList(sPath, "*");

//alert(flist.length);

 for( i = 0 ; i < flist.length ; i++ )

 {

  row = oDataset.addRow();

  oDataset.setColumn(row, "level", _level);

  oDataset.setColumn(row, "dir", sPath);

  oDataset.setColumn(row, "file", flist[i].filename);

  oDataset.setColumn(row, "size", flist[i].size);

  if( flist[i].isDirectory() == true )

  {

   oDataset.setColumn(row, "fgbn", "d");

   FILEGetFileList(sPath+"\\"+flist[i].filename, oDataset, _level+1);

  }

  else

   oDataset.setColumn(row, "fgbn", "f");

 }

}

☞  

 

☞  

 
 
 
 

  

'Nexacro-Function > ETC' 카테고리의 다른 글

Nexacro.Array - 값 존재 위치(index)얻기  (0) 2017.02.09
Nexacro.Etc - Graphic  (0) 2017.01.28
Nexacro.Etc - 확장 비교함수  (0) 2017.01.28
Posted by 농부지기
,