// Type
// 0: 파일 경로만 복사
// 1: 파일 이름만 복사
// 2: 파일 확장자 복사
// 3: 확장자를 뺀 파일명 복사
// 4: 2번케이스의 파일 확장자에서 .을 뺌.
CString strClip(CString str, int nType)
{
 //파일 Full Path를 복사
 TCHAR szTmp[4096];
 StrCpy(szTmp, str);
 CString strTmp;

 CString strResult = _T("");

 switch(nType)
 {
 case 0:
  //파일의 경로만 복사.
  PathRemoveFileSpec(szTmp);
  strResult = szTmp;
  break;

 case 1:
  // 1: 파일 이름만 복사
  strResult = PathFindFileName(szTmp);
  //strResult = szTmp;
  break;

 case 2:
  // 2: 파일 확장자 복사
  strResult = PathFindExtension(szTmp);
  break;

 case 3:
  // 3: 확장자를 뺀 파일명 복사
  strTmp = PathFindFileName(szTmp);
  ZeroMemory(szTmp, 4096);
  StrCpy(szTmp, strTmp);
  PathRemoveExtension(szTmp);
  strResult = szTmp;
  break;

 case 4:
  // 4: 2번케이스의 파일 확장자에서 .을 뺌.
  strResult = PathFindExtension(szTmp);
  strResult = strResult.Right(strResult.GetLength()-1);
  break;
 }


 return strResult;
}


출처: https://blog.naver.com/just720/40206748318

폴더선택 다이얼로그

 BROWSEINFO BrInfo;
TCHAR szBuffer[512];                                      // 경로저장 버퍼 

::ZeroMemory(&BrInfo, sizeof(BROWSEINFO));
::ZeroMemory(szBuffer, 512);

BrInfo.hwndOwner = GetSafeHwnd();
BrInfo.lpszTitle = _T("파일이 저장될 폴더를 선택하세요");
BrInfo.ulFlags = BIF_NEWDIALOGSTYLE | BIF_EDITBOX | BIF_RETURNONLYFSDIRS;
LPITEMIDLIST pItemIdList = ::SHBrowseForFolder(&BrInfo);
::SHGetPathFromIDList(pItemIdList, szBuffer);               // 파일경로 읽어오기

        // 경로를 가져와 사용할 경우, Edit Control 에 값 저장
CString str;
str.Format(_T("%s"), szBuffer);
SetDlgItemText(IDC_EDIT2, str);  

 

파일선택 다이얼로그

CString str = _T("All files(*.*)|*.*|"); // 모든 파일 표시
//CString strFilter = _T("Image File(*.BMP;*.JPG) | *.BMP;*.JPG; | All Files(*.*) | *.* || ");
// _T("Excel 파일 (*.xls, *.xlsx) |*.xls; *.xlsx|"); 와 같이 확장자를 제한하여 표시할 수 있음
CFileDialog dlg(TRUE, _T("*.dat"), NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, str, this);
//CFileDialog dlg(TRUE, NULL, NULL, OFN_FILEMUSTEXIST | OFN_ALLOWMULTISELECT, strFilter, NULL);

if (dlg.DoModal() == IDOK)
{
CString strPathName = dlg.GetPathName();
                // 파일 경로를 가져와 사용할 경우, Edit Control에 값 저장
SetDlgItemText(IDC_EDIT1, strPathName);  
}

 

출처 : https://psmkr0225.tistory.com/192

우클릭 - TortoiseSVN - Settings - Diff Viewer 

- Configure the program used for comparing different revisions of files 에서 External 선택

- ... 클릭하여 경로 프로그램 실행파일 선택 

 

현재시간 가져오기

CString strTime = CTime::GetCurrentTime().Format("%y-%m-%d %H:%M:%S");

 

시간 체크

 

CStopWatch stopWatch;
stopWatch.Start();

// 처리

stopWatch.End();
strMsg.Format(_T("[Test Time]  Time: %.3f sec-----"), stopWatch.GetDurationSecond());

 

//C# 프로그램
.Net Framework 4.6.2 버전 
Nuget 패키지 설치  검색명 Magick.NET-Q16 
설치한 패키지 : Magick.NET-Q16-x64  

 

//사용

using ImageMagick;

private void buttonRun_Click(object sender, EventArgs e)
 {
//경로내 모든파일
 string[] allfiles = Directory.GetFiles(@"D:\\TEST", "*.heic", SearchOption.AllDirectories);

   foreach (var file in allfiles)
   {
       FileInfo info = new FileInfo(file);
       using (MagickImage image = new MagickImage(info.FullName))
       {
            // Save frame as jpg
            image.Write(@"D:\\TEST\\result\\{info.Name}.jpg");
        }

    }
}


//출처 : https://stackoverflow.com/questions/56939187/converting-heic-to-jpeg-using-imagick-in-c-sharp

//exe
https://sanot.tistory.com/73

'공부 > C#' 카테고리의 다른 글

[C#] 스레드 내에서 타이머 실행이 안될때  (0) 2021.12.23

vs2019에서 경고 라인에는 녹색줄이 나타남

 

도구 - 옵션 - 환경 - 글꼴 및 색 - 경고  - 항목전경 에서 색상을 변경하여 감출 수 있음

 

기존 녹색줄

 

색상 변경

 

 

사용자 지정값 

R 30 G 30 B 30

스크롤 바에 색상이 보임

R 62 G 62 B 66

밑줄이 희미하게 보임

R 62 G 62 B 66 사용중

 

 

출처 : https://stackoverflow.com/questions/17998471/how-to-get-rid-of-green-warning-line-in-vs2010-editor

 DB복원시 MDF기본 위치 설정

 

DB우클릭 - 속성 - 데이터베이스 설정 - 데이터베이스 기본위치 

 

시작 - 서비스 - SQL Server - 중지 - 시작

 

시작 - 시스템 환경 변수 편집 - 시스템 속성 - 환경변수 - 사용자 변수

 

NUGET_PACKAGES

D:\nuget_root

 

 

//메인프레임 포인터얻기

CMainFrame * pFrame = reinterpret_cast<CMainFrame*>(AfxGetApp()->GetMainWnd());

//View포인터
 (CTestView *)pFrame->GetActiveView();

//Doc포인터
CTestDoc  m_pDocument = reinterpret_cast<CTestDoc *>(pFrame->GetActiveDocument());

 

//가끔 NULL 나와서 다운됨  (사용X)

( CMainFrame * pFrame = (CMainFrame*)AfxGetMainWnd(); )

 

 

//참고 : https://six605.tistory.com/261

VS2015

도구 - 옵션 - 프로젝트 및 솔루션 - 일반 - 프로젝트 위치

 

 

 

 

 

 

 

vs2019

도구 - 옵션 - 프로젝트 및 솔루션 - 위치 - 프로젝트 위치

vs2015 기준 (2019 동일)

 

아무 프로젝트나 생성 후

 

메뉴 - 보기 - 다른창 - 속성관리자

- 하위메뉴 - Microsoft.cpp...user  에서 설정시 모든 프로젝트에 적용

 

-> 중간디렉토리 : 빌드로그 저장됨

-> 출력디렉토리 : 실행파일 생성됨

$(ProjectName) : 프로젝트 네임

$(Platform) : x64

$(Configuration) : Debug / Release

 

 

 

IPCH 설정

 

도구 - 옵션 - 텍스트편집기 - C/C++ - 고급 - 대체(fallback) 위치 - 경로설정

 

VisualStudio 사용시  느려짐

Intellisense 버벅거림

 

* 방법

삭제 - NVIDIA Nsight Visual Studio Edition 

 

출처 :

https://kangaroo-dev.tistory.com/5
https://developercommunity.visualstudio.com/t/nvidia-nsight-makes-intellisense-and-autocomplete/1234334

 

MFC SDI / MDI 프로젝트에서  Copy & Paste 가 동작이 안될때

 

리소스뷰에서 Accelerator에서 관련 키값 삭제 

 

리소스 뷰 클릭

 

Accelerator 클릭
관련 키값 삭제

 

출처 : https://blog.daum.net/baramjin/11016239

 조회
select (replace(컬럼명,'변경전데이터','변경후데이터')) 컬럼명 from 테이블명
ex)
 select (replace(strImageFilePath,'\\192.168.0.114\','')) strImageFilePath from tbl_Result

변경
 Update 테이블명 Set 컬럼명 = (replace(컬럼명,'변경전데이터','변경후데이터'))
 Select * From 테이블명
ex)
 Update tbl_Result Set strImageFilePath = (replace(strImageFilePath,'\\192.168.0.114\',''))
 Select * From tbl_Result
 

 

'공부 > SQL' 카테고리의 다른 글

[MSSQL기능] 상위 N개 행 편집  (0) 2023.03.30
[MSSQL설정] DB복원시 MDF기본 위치 설정  (0) 2022.05.06
[MSSQL] 중복 데이터 삭제  (0) 2021.08.26
[MSSQL] 특정 문자 변경 쿼리  (0) 2021.08.13
[Oracle] 테이블 컬럼 변경  (0) 2021.07.19
#include <experimental/filesystem>


string strDrawDirname = "FileDir";  //실행파일 위치에 있는 폴더이름  // 탐색할 폴더명
for (auto& p : experimental::filesystem::directory_iterator(strDrawDirname))  //경로 내 모든 파일 루프
{
string strFile = strDrawDirname + "\\" + p.path().filename().string();
CString strPath;
strPath.Format(_T("%S"), strFile.c_str());  //탐색한 폴더 내 파일 명

}

 

 System.Windows.Forms.Timer timer  대신  System.Timers.Timer 사용

 

사용방법

1.  System.Windows.Forms.Timer timer

 System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
 timer.Tick += new EventHandler(RunTimerFunc);
 timer.Interval = 1000;

2.  System.Timers.Timer 

System.Timers.Timer timer = new System.Timers.Timer();
timer.Elapsed += new System.Timers.ElapsedEventHandler(RunTimerFunc);    
timer.Interval = 3000;

 

출처 :
https://noel-embedded.tistory.com/952

https://m.blog.naver.com/zic6188610/221029988476

'공부 > C#' 카테고리의 다른 글

[C#] HEIC to JPG 변환 코드 Magick.NET-Q16  (0) 2022.05.15

std::map는 삽입 삭제시 정렬이 일어나 느림

std::unordered_map 은 정렬이 일어나지 않음

 

사용법은 map와 같음

 

헤더파일에 추가

#include <unordered_map>

 

선언

std::unordered_map<unsigned long, Mat> m_mapBuffer;

 

 

'공부 > MFC' 카테고리의 다른 글

[MFC] png Image Load From Resource  (0) 2022.11.29
[MFC] CImage CBitmap HBITMAP 변환  (0) 2022.11.29
[MFC] 전체화면 사용  (0) 2022.11.24
[MFC] 다이얼로그 DLL 만들기  (0) 2022.11.16
[MFC] SDI 전체 화면  (1) 2022.09.23

Thread 내부에서 사용된 CString 이었다.

Thread 사용 중 TerminateThread 와 같이 강제 종료 될때,

CString 에서 사용하는 메모리 영역이 제대로 해제 되지 않아 발생할 수 있다. 

 

결론은 thread가 종료 되기 전 CString 객체에서 Empty() 를 호출하여 문자열을 비워주면 나를 괴롭혔던 memory leak이 사라지는 것을 확인할 수 있다.

 

Thread 사용 중 원인을 알 수 없는 memory leak 발생 시 CString을 확인해보자.

 

출처 : https://cherrycloud.tistory.com/41

Assert  

debug_heap.cpp  

Line: 980 

Expression: __arct_first_block == header

 

 

조치:  프로젝트 - 속성 - c/c++ - 코드생성 - 런타임 라이브러리 에서   MT -> MD 로 변경

        프로젝트 - 속성 - 일반 - MFC사용 - 공유 DLL에서 MFC 사용 선택

 

 

 

 

 

 

 

 

//중복된데이터 검색

//컬럼명 : nClientID, nModelID, nAlgType

//테이블 : MuraExceptCondition

 

select nClientID, nModelID, nAlgType, COUNT(*) AS CNT
from tbl_MuraExceptCondition
GROUP BY nClientID, nModelID, nAlgType
HAVING COUNT(*) > 1

 

//삭제

--SELECT COUNT(*)
--from tbl_MuraExceptCondition

 

DELETE tbl_MuraExceptCondition
WHERE nIndex NOT IN (
SELECT MAX(nIndex)
from tbl_MuraExceptCondition
GROUP BY nClientID, nModelID, nAlgType
)

 

//퍼온것

실제 작업시에는 대부분 unique index를 걸거나, primary key 를 걸어 놓아 그런 일이 벌어지지 않지만, 벌크로 데이터를 작업하거나 할 경우, 중복된 데이터를 보거나, 제거하고 싶을 때가 있습니다.

단순히 중복 카운트를 조회 하고 싶을 경우엔, 다음과 같이 grouping 하고 count를 세면 됩니다만,

 

테이블 명 : tbl_some_table

컬럼 명: some_id, some_nm, some_description

-- 중복 카운트
SELECT some_id, COUNT(*)
FROM tbl_some_table
GROUP BY some_id
HAVING COUNT(*) > 1;

-- 여러 컬럼의 중복 카운트
SELECT some_id, some_nm, some_description, COUNT(*)
FROM tbl_some_table
GROUP BY some_id, some_nm, some_description
HAVING COUNT(*) > 1;

 

 

 

중복된 데이터 중, 첫번째(또는 마지막) 하나만 빼고 나머지를 조회한다거나, 삭제하고 싶을 때가 있습니다. 그러한 경우 다음과 같은 inline view 로 처리할 수 있습니다. (WITH 를 사용해도 되나, 하위 버전의 SQL 일 경우에는 WITH 구문이 먹지 않죠. 응? 하위 버전은 ROW_NUMBER 가 안 먹겠네요. 아이고 배야. - 하위 버전도 inline view 를 여럿 쓰면 되긴 합니다만.)

-- 중복 데이터를 알고 싶다.
SELECT *
 FROM (
            SELECT some_id
                     , dup_idx = ROW_NUMBER() OVER (
                                   PARTITION BY some_id ORDER BY some_id )
            FROM tbl_some_table (NOLOCK)
           ) tb_dup
WHERE tb_dup.dup_idx > 1;

-- 중복 데이터 기준으로 중복된 데이터를 다 조회하고 싶다.
SELECT t.*
FROM (
           SELECT some_id , dup_idx = ROW_NUMBER() OVER (
                                                 PARTITION BY some_id ORDER BY some_id )
            FROM tbl_some_table (NOLOCK)
           ) tb_dup INNER JOIN tbl_some_table t (NOLOCK)
                                 ON t.some_id = tb_dup.some_id
WHERE tb_dup.dup_idx > 1;

-- 중복 데이터를 지우고 싶다!!!
DELETE tb_dup
FROM (
           SELECT some_id ,
                       dup_idx = ROW_NUMBER() OVER (
                                     PARTITION BY some_id ORDER BY some_id )
            FROM tbl_some_table
                 ) tb_dup
WHERE tb_dup.dup_idx > 1;

-- 여러 컬럼일 경우? 중복 데이터를 지우고 싶다!!!
DELETE tb_dup
  FROM (
               SELECT some_id, some_nm, some_description ,
                         dup_idx = ROW_NUMBER() OVER (
                                       PARTITION BY some_id, some_nm, some_description
                                       ORDER BY some_id, some_nm, some_description )
                 FROM tbl_some_table
              ) tb_dup
WHERE tb_dup.dup_idx > 1;

 

이것 또한 그냥 메모입니다. 하하.

 

출처 : https://withsoju.tistory.com/686

+ Recent posts