|
Delimiter를 지정해서 문자열 파싱을 할때 공백을 하나의 분리자로 인식하는 문제를 피하는 방법입니다.
TStringList *Strings = new TStringList;
String Path = "C:\Program Files\Wj Manager";
ExtractStrings(TSysCharSet()<<'\\', TSysCharSet(), Path.c_str(), Strings);
// 결과
// Strings[0] = "C:";
// Strings[1] = "Projgram Files";
// Strings[2] = "Wj Manager";
delete Strings;
이렇게 쓰면 됩니다.
고황일 님이 쓰신 글 :
: 어제 폴더 검색 프로그램 만들다가 발견했는데요.
: TStrings 클래스에서 Delimiter를 사용할때 공백이 있으면 그것도 하나의 분리자로 인식한다고 합니다.
: 때문에 "C:\Program Files\Wj Manager" 이런 문자열에서 분리자로 "\"를 쓸 경우에
: Strings[0] = "C:"
: Strings[1] = "Program"
: Strings[2] = "Files"
: Strings[3] = "Wj"
: Strings[4] = "Manager"
: 이렇게 반환합니다.
:
: 이런한 문제를 회피하기 위해서 경로 문자열의 공백을 Windows에서 경로에 사용 할 수 없는 문자로 대치하고
: Delimiter로 구분한 다음 대치 문자를 공백으로 바꾸는 방법을 이용하셔야 할듯합니다.
:
: 명확한 답이 아닌 답변을 써서 혼란스럽게 해서 죄송합니다.
:
: 고황일 님이 쓰신 글 :
: : 제가 전에 썼던 방법인데요
: : TStrings의 Delimit를 이용한 방법입니다.
: :
: :
: : void __fastcall TForm1::Button1Click(TObject *Sender)
: : {
: : AnsiString ApplicationPath = "C:\\windows\\systems\\info\\test.bat"; // 테스트를 위해서..
: : TStrings *Path = new TStringList; // 스트링리스트를 만들구요
: : AnsiString CurrentDrive;
: : AnsiString BaseDirectory;
: : AnsiString MSG;
: :
: : Path->Delimiter = '\\'; // 분리자는 '\' 이것을 사용합니다. C언어인관계로 '\\'
: : Path->DelimitedText = ApplicationPath; // 분리할 문자열을 넣으시구요
: : // 몇개가 분리되었는지는 Path->Count를 이용하여 질의할 수 있습니다.
: : CurrentDrive = Path->Strings[0]; // 첫번째 분리자 까지의 문자열
: : BaseDirectory = Path->Strings[1]; // 두번째 분리자 까지의 문자열
: :
: : MSG = "작업 드라이브 : "+CurrentDrive+"\n"+"베이스 디렉토리 : "+BaseDirectory;
: :
: : ShowMessage(MSG); // 화면에 표시...
: :
: : }
: : //---------------------------------------------------------------------------
: :
: :
: : 빌더초자 님이 쓰신 글 :
: : : 현재 실행 중인 프로그램의 디렉토리 정보가..
: : : 다음과 같다면..
: : : D:\BuilderTest\debug\test1\app
: : :
: : : 최상단의 해당하는 D:\와
: : : D:\BuilderTest를 어떻게 가져오죠?
: : :
: : :
: : : 고수님들 좀 알려주세요!!!
|