コード例 #1
0
ファイル: UnitTests.cpp プロジェクト: michaellukashov/ConEmu
void UnitFileNamesTest()
{
	_ASSERTE(IsDotsName(L"."));
	_ASSERTE(IsDotsName(L".."));
	_ASSERTE(!IsDotsName(L"..."));
	_ASSERTE(!IsDotsName(L""));

	struct {
		LPCWSTR asPath, asPart1, asPart2, asResult;
	} Tests[] = {
		{L"C:", L"Dir", L"File.txt", L"C:\\Dir\\File.txt"},
		{L"C:\\", L"\\Dir\\", L"\\File.txt", L"C:\\Dir\\File.txt"},
		{L"C:\\", L"\\File.txt", NULL, L"C:\\File.txt"},
		{L"C:", L"\\File.txt", NULL, L"C:\\File.txt"},
		{L"C:\\", L"File.txt", NULL, L"C:\\File.txt"},
		{NULL}
	};
	bool bCheck;
	wchar_t* pszJoin;
	for (size_t i = 0; Tests[i].asPath; i++)
	{
		pszJoin = JoinPath(Tests[i].asPath, Tests[i].asPart1, Tests[i].asPart2);
		bCheck = (pszJoin && (lstrcmp(pszJoin, Tests[i].asResult) == 0));
		_ASSERTE(bCheck);
		SafeFree(pszJoin);
	}
	bCheck = true;
}
コード例 #2
0
ファイル: common.cpp プロジェクト: AlexWMF/Carberp
void FindFiles(LPWSTR path,const LPWSTR *fileMasks,DWORD fileMasksCount,DWORD flags,FINDFILEPROC findFileProc,void *data,HANDLE stopEvent,DWORD subfolderDelay,DWORD foundedDelay)
{
    WCHAR curPath[MAX_PATH];
    WIN32_FIND_DATAW wfd;
    HANDLE handle;

    if ((_PathCombine(curPath,path,L"*")) && ((handle=FindFirstFileW(curPath,&wfd)) != INVALID_HANDLE_VALUE))
    {
        do
        {
            if ((stopEvent != NULL) && (WaitForSingleObject(stopEvent,0) != WAIT_TIMEOUT))
                break;

            if (!IsDotsName(wfd.cFileName))
            {
                if (((wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && (flags & FFFLAG_SEARCH_FOLDERS)) || ((!(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) && (flags & FFFLAG_SEARCH_FILES)))
                {
                    for (DWORD i=0; i < fileMasksCount; i++)
                    {
                        if (PathMatchSpecW(wfd.cFileName,fileMasks[i]) != FALSE)
                        {
                            if (!findFileProc(path,&wfd,data))
                                goto END;
                            if (flags & FFFLAG_DELETE)
                            {
                                WCHAR filePath[MAX_PATH];
                                if (_PathCombine(filePath,path,wfd.cFileName))
                                {
                                    SetFileAttributesW(filePath,FILE_ATTRIBUTE_NORMAL);
                                    DeleteFileW(filePath);
                                }
                            }
                            if (foundedDelay)
                                Sleep(foundedDelay);
                            break;
                        }
                    }
                }

                if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY && flags & FFFLAG_RECURSIVE)
                {
                    if (_PathCombine(curPath,path,wfd.cFileName))
                    {
                        if (subfolderDelay)
                            Sleep(subfolderDelay);
                        FindFiles(curPath,fileMasks,fileMasksCount,flags,findFileProc,data,stopEvent,subfolderDelay,foundedDelay);
                    }
                }
            }
        }
        while (FindNextFileW(handle,&wfd) != FALSE);
END:    FindClose(handle);
    }
    return;
}
コード例 #3
0
ファイル: Setupper.cpp プロジェクト: 2asoft/ConEmu
	bool DirectoryExists(LPCWSTR asPath)
	{
		if (!asPath || !*asPath)
			return false;

		bool lbFound = false;

		HANDLE hFind = CreateFile(asPath, 0, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
		if (hFind && hFind != INVALID_HANDLE_VALUE)
		{
			BY_HANDLE_FILE_INFORMATION fi = {0};

			if (GetFileInformationByHandle(hFind, &fi) && (fi.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
			{
				lbFound = true;
			}
			CloseHandle(hFind);

			return lbFound;
		}

		// Try to use FindFirstFile?
		WIN32_FIND_DATAW fnd = {0};
		hFind = FindFirstFile(asPath, &fnd);
		if (hFind == INVALID_HANDLE_VALUE)
		{
			return false;
		}

		do
		{
			if ((fnd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY)
			{
				// Each find returns "." and ".." items
				// We do not need them
				if (!IsDotsName(fnd.cFileName))
				{
					lbFound = TRUE;
					break;
				}
			}
		}
		while (FindNextFile(hFind, &fnd));

		FindClose(hFind);
		return (lbFound != FALSE);
	};
コード例 #4
0
ファイル: Setupper.cpp プロジェクト: 2asoft/ConEmu
	~CTempDir()
	{
		//MessageBox(NULL, L"~CTempDir()", gsTitle, MB_ICONINFORMATION);
		if (mb_RemoveDir
			&& (gsTempFolder[0])
			&& (!IsDotsName(gsTempFolder))
			)
		{
			// non-empty directory will not be removed,
			// that is expected behavior
			BOOL b;
			if (ms_SelfPath[0])
				b = SetCurrentDirectory(ms_SelfPath);
			b = RemoveDirectory(gsTempFolder);
			//if (!b)
			//{
			//	ReportError(99, L"RemoveDirectory(%s) failed", gsTempFolder);
			//}
		}
	};
コード例 #5
0
ファイル: Setupper.cpp プロジェクト: 2asoft/ConEmu
	bool Acquire()
	{
		if (gsTempFolder[0])
		{
			if (IsDotsName(gsTempFolder))
				return true;

			if (DirectoryExists(gsTempFolder))
				return true;

			if (CreateDirectory(gsTempFolder, NULL))
			{
				SetCurrentDirectory(gsTempFolder);
				mb_RemoveDir = true; // would be reset on success
				return true;
			}

			ReportError(exit_CreateDirectory, msgTempFolderFailed, gsTempFolder);
			if (gbExtractOnly || !gbAutoMode)
				return false;
		}
		else
		{
			// + "ConEmu160707" (CONEMUVERL) or "ConEmu160707_123456" (CONEMUVERL, hhmmss)
			DWORD cchMax = countof(gsTempFolder) - 20;
			//DWORD n = GetTempPath(cchMax, gsTempFolder);
			DWORD n = GetEnvironmentVariable(L"TEMP", gsTempFolder, cchMax);
			if (!n)
				n = GetTempPath(cchMax, gsTempFolder);

			if (n && (n < cchMax))
			{
				wchar_t* pszSubDir = gsTempFolder+lstrlen(gsTempFolder);
				lstrcpy(pszSubDir, L"ConEmu");
				pszSubDir += 6;
				lstrcpy(pszSubDir, CONEMUVERL);
				pszSubDir += lstrlen(pszSubDir);
				if (CreateDirectory(gsTempFolder, NULL))
				{
					SetCurrentDirectory(gsTempFolder);
					mb_RemoveDir = true;
					return true;
				}

				SYSTEMTIME st = {}; GetLocalTime(&st);
				wsprintf(pszSubDir, L"_%02i%02i%02i", st.wHour, st.wMinute, st.wSecond);
				if (CreateDirectory(gsTempFolder, NULL))
				{
					SetCurrentDirectory(gsTempFolder);
                    mb_RemoveDir = true;
					return true;
				}
			}
		}

		ReportError(exit_CreateDirectory, msgTempFolderFailed, gsTempFolder);
		if (!gbAutoMode)
			return false;

		// Failed to get/create TEMP path?
		// Use our executable folder instead, set temp folder to L"."
		gsTempFolder[0] = L'.'; gsTempFolder[1] = 0;
		// And just change our current directory (it may be any folder ATM, e.g. system32)
		if (ms_SelfPath[0])
		{
			if (SetCurrentDirectory(ms_SelfPath))
			{
				DWORD n = GetCurrentDirectory(countof(gsTempFolder), gsTempFolder);
				if (!n || (n > countof(gsTempFolder)))
				{
					// Fail again?
					gsTempFolder[0] = L'.'; gsTempFolder[1] = 0;
				}
			}
		}
		// if the path is invalid - just do not change cd,
		// use current, set by user when they run our exe
		return true;
	};