C++ 파일 존재 여부 체크하는 함수 (isExistFile) 함수

2018.01.08 10:42

C#에서는 FILE 핸들러로 바로 확인이 가능한데 C++는 한줄에 쓰기 번거러워 따로 함수를 만들어서 사용한다.


유니코드가 아닌 프로젝트도 있어 분기처리 해준다.



bool isExistFile(CString _strFile)
{
#ifdef _UNICODE
	return(_waccess_s(_strFile, 0) != -1);
#else
	return (_access_s(_strFile, 0) != -1);
#endif
	
}



c/c++ 접두어

2016.01.06 13:48
  • a : 배열 (Array)
  • b : BOOL 형 변수 (Boolean)
  • by : BYTE 형 변수 (Byte, = unsigned char)
  • c : 카운터 변수 (Counter, = int)
  • cb : 바이트의 개수
  • ch : char형 변수 (Character, = char)
  • cx : X 좌표용 변수 (Coordinate X Value, = int)
  • cy : Y 좌표용 변수 (Coordinate Y Value, = int)
  • d : 날짜형 변수 (CDate)
  • dbl : double형 변수 (Double, = double)
  • dw : Unsined Long (DWORD)
  • f : BOOL 형 변수 (Flag)
  • h : 핸들형 변수 (Handle, = HANDLE)
  • n : 자연수형 변수 (Natural Number, = int)
  • i : 정수형 변수 (Integer, = int)
  • i : 인덱스 (Index)
  • l : long형 변수 (Long, = long)
  • m_ : 특정 클래스의 멤버 변수 (Member Variable)
  • p : 포인터 변수 (Pointer, = [type]*)
  • lp : long/far 포인터 변수 (Long/Far Pointer)
  • 32비트 프로그래밍에서는 일반 수준의 포인터로 취급함
  • 16비트 프로그래밍에서는 먼 거리의 포인터로 취급함
  • s : 문자열 (String)
  • sz : NULL (= \0)로 끝나는 문자열 (String)
  • u : 자연수 중 양수형 변수 (Unsigned Integer, = unsigned int)
  • w : WORD형 변수 (Word, = unsigned short)
  • dw : DWORD형 변수 (Double Word, = unsigned long)
  • str : CString형 변수 (String)
출처 : http://unidri.tistory.com/38


'Programming' 카테고리의 다른 글

[C++/MFC] Screen Capture  (0) 2016.06.13
fatal error C1004: unexpected end of file found 에러 뜰 때  (0) 2016.01.07
c/c++ 접두어  (0) 2016.01.06
CString Format함수 에러  (0) 2015.12.30
C++ String 정리 (C++ 문자열)  (0) 2015.12.28
[MFC] 그리드컨트롤 체크박스 사용  (0) 2015.10.28


CString Format함수 에러

2015.12.30 11:00

아래와 같은 오류가 발생할때에는 프로젝트 환경이 유니코드환경일 경우이다.


'void ATL::CStringT<BaseType,StringTraits>::Format(const wchar_t * ,...)' :

매개 변수 1을 'const char [6]'에서 'const wchar_t *'으로 변활할수 없습니다 


CString Format 멤버함수를 사용하기 위해서는

아래와 같이 수정하여 사용한다.


수정 전 :



CString strtest;
strtest.Format("%d",nIndex);


수정 후 :


CString strtest;
strtest.Format(_T("%d"),nIndex);


유니코드환경에서는 _T로 포맷스트링을 감쏴줘야한다.


C++ String 정리 (C++ 문자열)

2015.12.28 11:18

출처 : http://makerj.tistory.com/127

C++ String 정리 (C++ 문자열)


C++11 환경에서 정리한 글입니다

또한 using namespace std를 한 상태임을 밝힙니다



[string 생성]


1 >>

string myString = "abcd";


2 >>

string myString;

myString = "abcd";


중요!

1번 방식으로는 'a'와 같은 char로 생성이 불가능하다.

따라서 'a'와 같은 char로 생성하려면 2번 방식을 써야한다

string myString;

myString = 'a' ( O )








[string 확장, 문자열 추가]


string myString = "abc";이라는 문자열이 있다면


myString += "blahblah"; 와 같이 추가할 수 있다


또는


myString.append("blahblah");와 같이 추가할 수 있다


한 글자. 즉 char를 append로 확장하려면


myString.append("a"); 와 같이 하면 된다. myString.append('a');는 불가능하다






[string 길이]


string myString = "abc";이라는 문자열이 있다면


myString.size()

myString.length()


으로 문자열의 길이를 받을 수 있다.


*** size()와 length()는 결과가 완전히 동일하다


[string 길이 2]


myString.capacity()는 실제로 myString이 갖고 있는 길이를 반환한다

myString.max_size()는 myString이 최대로 갖을 수 있는 길이를 반환한다








[string의 특정 위치 문자 받기 (charAt 기능) ]


string myString = "abc";이라는 문자열이 있다면


myString.at(0) >>>>> 'a' 반환

myString.at(1) >>>>> 'b' 반환


이와같이 java의 charAt과 같은 기능을 수행한다.








[string에 있는 특정 문자 검색]


string myString = "This is my String";이라는 문자열이 있다면


myString.find("my");를 통해 "my"라는 문자열이 시작되는 위치를 반환한다


이를 활용하면


if (myString.find("my") != string::npos) {


 // "my"라는 문자열을 찾았을 때의 동작


}


으로 활용 가능하다








[string간의 문자열 복사]


string myString  = "acs";


string myString2 ;

myString2 = myString;


이게 다다.


myString의 문자열이 나중에 "bdjxzxddx"라고 바뀐다고 해도

myString2의 문자열은 여전히 "acs"다. 결국 myString2 에는 영향을 미치지 않는다.








[string간의 문자열 비교]


string myString = "abc";

string myStirng2 = "bbc"; 라는 문자열이 있다면


myString.compare(myString2)과 같이 비교한다.


이를 활용하면,


if (myString.compare(myString2) == 0) {


  // 두 문자열이 완전히 같은 문자열일때의 처리


} else if (myString.compare(myString2) < 0) {


  // myString의 문자열이 myString2보다 사전순으로 앞일 때 처리


} else if (myString.compare(myString2) > 0) {


 // myString의 문자열이 myString2보다 사전순으로 뒤일 때 처리



으로 활용 가능하다.








[string의 문자열 대체하기 (replace기능) ]


//myString의 "is" 문자열을 모두 "was"로 바꾸는 예제

string myString = "that is is is man";


int pos;

string replaceString = "was";


while( (pos = myString.find("is")) != string::npos) {


myString.replace(pos,replaceString.length(),replaceString);


}


의 방법으로 대체 가능하다.


그러나 이 방법은 대체 문자가 길어지면


기존의 문자를 덮어쓰기 하면서 대체가 이루어진다


ex) 

문자열이 "this is is is man" 일 때,

"is"를  위와 같은 방식으로 "asdgklsjdglsasdf"로 대체한다면

대체된 문자열은 "this asdgklsjdglsasdf"이 되어버린다




따라서 이 현상을 피해 기존의 문자열을 덮어쓰지 않고 진짜 대체만 한 구현은

아래와 같다. (제가 간단히 만든 것이므로 더 좋은 다른 구현방법이 많을 것입니다)


string myString = "that is is is cool is man";
string findString = "is";
string replaceString = "abcdef";

int pos;
while( (pos = myString.find(findString)) != string::npos){

	myString.erase(pos,findString.length());
	myString.insert(pos,replaceString);


}









[ 기본변수를 문자열로 ( toString 기능 ) ]

개발환경이 C++11을 지원해야함

string myString;

int myInt = 10;


myString = to_string(myInt) ;



[ 문자열을 기본변수로 ]

개발환경이 C++11을 지원해야함

string myString = "55";

int myInt ;


myInt = stoi(myString);


[MFC] 그리드컨트롤 체크박스 사용

2015.10.28 16:16

사용한 버젼은 CGridCtrl v2.20 이며 생성된 그리드컨트롤에

체크박스를 생성할때 아래와 같이 추가하면된다.

m_gridBinTable.SetCellType(nRow, nCol, RUNTIME_CLASS(CGridCellCheck));	//
pCell = (CGridCellCheck*)m_gridBinTable.GetCell(nRow, nCol);



버전별 Microsoft Visual C++ 재배포 패키지 다운

2015.09.30 19:37

VC++로 빌드된 프로그램을 실행할 경우 *.dll파일이 없다면서 경고가 발생할 수 잇다.


그럴때는 아래 링크들을 참고하여 해당 운영체제별(64비트,32비트)로 다운로드 하여 설치하면 된다.



Visual Studio 2015용 Visual C++ 재배포 가능 패키지

http://www.microsoft.com/ko-kr/download/details.aspx?id=48145



Visual Studio 2013용 Visual C++ 재배포 가능 패키지

http://www.microsoft.com/ko-kr/download/details.aspx?id=40784



Microsoft Visual C++ 2010 Service Pack 1 재배포 가능 패키지

http://www.microsoft.com/ko-KR/download/details.aspx?id=26999



Microsoft Visual C++ 2008 Service Pack 1 재배포 가능 패키지

http://www.microsoft.com/ko-KR/download/details.aspx?id=26368



Microsoft Visual C++ 2005 Service Pack 1 재배포 가능 패키지

http://www.microsoft.com/ko-KR/download/details.aspx?id=26347