Exemplo n.º 1
0
bool
file_copy_using_memory_map2(
	_In_ const wchar_t* src_file,
	_In_ const wchar_t* dst_file
	)
{
	_ASSERTE(NULL != src_file);
	_ASSERTE(NULL != dst_file);
	if (NULL == src_file || NULL == dst_file) return false;

	if (!is_file_existsW(src_file))
	{
		print("err ] no src file = %ws", src_file);
		return false;
	}

	if (is_file_existsW(dst_file))
	{
		DeleteFileW(dst_file);
	}

	// map src, dst file
	pmap_context src_ctx = open_map_context(src_file);
	pmap_context dst_ctx = create_map_context(dst_file, src_ctx->size);
	if (NULL == src_ctx || NULL == dst_ctx)
	{
		print("err ] open_map_context() failed.");
		close_map_context(src_ctx);
		close_map_context(dst_ctx);
		return false;
	}

	// copy src to dst by mmio
	uint32_t i = 0;
	uint32_t bs = 0;
	uint32_t rest = src_ctx->size;
	while (0 < rest)
	{
		if (rest > 4096)
		{
			bs = 4096;
			rest -= 4096;
		}
		else
		{
			bs = rest;
			rest = 0;
		}

		RtlCopyMemory(&dst_ctx->view[i], &src_ctx->view[i], bs);
		i += bs;
	}
	return true;
}
Exemplo n.º 2
0
bool create_bob_txt()
{
	wchar_t *buf = getCurrentDir();

	// current dir \\ bob.txt 파일명 생성
	wchar_t file_name[260];
	if (!SUCCEEDED(StringCbPrintfW( // safe하도록 모든 boundary check를 다 해주는 API
		file_name,
		sizeof(file_name),
		L"%ws\\bob.txt",
		buf)))
	{
		print("err, cannot create file name");
		free(buf);
		return false;
	}
	free(buf); buf = NULL;

	if (true == is_file_existsW(file_name))
	{
		::DeleteFileW(file_name);
	}

	// 파일 생성
	HANDLE file_handle = CreateFileW(
		file_name,
		GENERIC_WRITE,
		FILE_SHARE_READ,
		NULL,
		CREATE_NEW,
		FILE_ATTRIBUTE_NORMAL,
		NULL);
	if (file_handle == INVALID_HANDLE_VALUE)
	{
		print("err, CreateFile(path=%ws), gle=0x%08x", file_name, GetLastError());
		return false;
	}

	// 파일에 데이터 쓰기
	DWORD cbWritten = 0;
	BYTE ByteOrderMark[] = { 0xEF, 0xBB, 0xBF };
	if (TRUE != WriteFile(file_handle, ByteOrderMark, sizeof(ByteOrderMark), &cbWritten, NULL)) {
		print("err, BOM writing failed, gle=0x%08x", GetLastError());
		CloseHandle(file_handle);
		return false;
	}

	wchar_t file_content[] = L"안녕하십니까. 이 테이프는 2015학년도 대학수학능력시험 언어 영역 듣기 평가 안내 녹음테이프입니다. 지금부터 2015학년도 대학수학능력시험 1교시 언어 영역 듣기 방송을 시작하겠습니다.";
	char *utf8_file_content = WcsToMbsUTF8(file_content);

	WriteFile(file_handle, utf8_file_content, strlen(utf8_file_content), &cbWritten, NULL);

	wchar_t file_content2[] = L"'Cause baby now we got bad blood. You know it used to be mad love. So take a look what you've done. 'Cause baby now we got bad blood.";
	utf8_file_content = WcsToMbsUTF8(file_content2);
	WriteFile(file_handle, utf8_file_content, strlen(utf8_file_content), &cbWritten, NULL);
	free(utf8_file_content);
	// 파일 닫기
	CloseHandle(file_handle);
	return true;
}
Exemplo n.º 3
0
/**
* @brief
* @param
* @see
* @remarks
* @code
* @endcode
* @return
**/
bool is_file_existsA(_In_ const char* file_path)
{
	WCHAR* wcs = MbsToWcs(file_path);
	if (NULL == wcs) { return false; }

	bool ret = is_file_existsW(wcs); free(wcs);
	return ret;
}
Exemplo n.º 4
0
/**
* @brief
* @param
* @see
* @remarks
* @code
* @endcode
* @return
**/
bool
file_copy_using_memory_map(
_In_ const wchar_t* src_file,
_In_ const wchar_t* dst_file
)
{
	_ASSERTE(NULL != src_file);
	_ASSERTE(NULL != dst_file);
	if (NULL == src_file || NULL == dst_file) return false;

	if (!is_file_existsW(src_file))
	{
		print("err ] no src file = %ws", src_file);
		return false;
	}

	if (is_file_existsW(dst_file))
	{
		DeleteFileW(dst_file);
	}

	// map src, dst file
	pmap_context src_ctx = open_map_context(src_file);
	pmap_context dst_ctx = create_map_context(dst_file, src_ctx->size);
	if (NULL == src_ctx || NULL == dst_ctx)
	{
		print("err ] open_map_context() failed.");
		close_map_context(src_ctx);
		close_map_context(dst_ctx);
		return false;
	}

	// copy src to dst by mmio
	for (uint32_t i = 0; i < src_ctx->size; ++i)
	{
		dst_ctx->view[i] = src_ctx->view[i];
	}

	close_map_context(src_ctx);
	close_map_context(dst_ctx);
	
	return true;
}
Exemplo n.º 5
0
/**
 * @brief	
 * @param	
 * @see		
 * @remarks	
 * @code		
 * @endcode	
 * @return	
**/
bool analyzer::initialize(_In_ const wchar_t* db_path)
{
	_ASSERTE(NULL != db_path);
	if (NULL == db_path) return false;

	if (true != is_file_existsW(db_path))
	{
		log_err L"no db file, path = %s", db_path log_end
		return false;
	}
Exemplo n.º 6
0
/**
 * @brief	존재하는 db 파일을 오픈한다. 
 * @param	
 * @see		
 * @remarks	
 * @code		
 * @endcode	
 * @return	
**/
bool CLocalDb::initialize(_In_ std::wstring& local_db_path)
{
	if (true == _initialized) return true;

	if (true != is_file_existsW(local_db_path.c_str()))
	{
		log_info 
			L"[CLocalDb::initialize] db does not exist. file = %s", 
			local_db_path.c_str() 
		log_end
		return false;
	}
Exemplo n.º 7
0
/**----------------------------------------------------------------------------
\brief  파일 IO 를 위해 파일을 오픈한다.

\param
\return
\code

\endcode
-----------------------------------------------------------------------------*/
DTSTATUS
FileIoHelper::FIOpenForRead(
IN std::wstring FilePath
)
{
	if (TRUE == Initialized()) { FIOClose(); }

	mReadOnly = TRUE;
	if (TRUE != is_file_existsW(FilePath.c_str()))
	{
		log_err
			"no file exists. file=%ws", FilePath.c_str()
			log_end
			return DTS_NO_FILE_EXIST;
	}
Exemplo n.º 8
0
/**
 * @brief	
 * @param	
 * @see		
 * @remarks	
 * @code		
 * @endcode	
 * @return	
**/
int _tmain(int argc, _TCHAR* argv[])
{
	if (argc!= 2) 
	{
		show_usage(argv[0]);
		return -1;
	}

	// check driver file exists
	wchar_t* driver_path = argv[1];
	if (true != is_file_existsW(driver_path))
	{
		log_err L"file does not exists. file = %s", driver_path log_end
		return -1;
	}
Exemplo n.º 9
0
/**
* @brief
* @param
* @see
* @remarks
* @code
* @endcode
* @return
**/
bool create_very_big_file(_In_ const wchar_t* file_path, _In_ uint64_t size_in_mb)
{
	_ASSERTE(NULL != file_path);
	if (NULL == file_path) return false;

	if (is_file_existsW(file_path))
	{
		::DeleteFileW(file_path);
	}

	// create very big file
	HANDLE file_handle = CreateFile(
		file_path,
		GENERIC_WRITE,
		FILE_SHARE_READ,
		NULL,
		CREATE_NEW,
		FILE_ATTRIBUTE_NORMAL,
		NULL
		);
	if (INVALID_HANDLE_VALUE == file_handle)
	{
		print("err ] CreateFile( %ws ) failed. gle = %u", file_path, GetLastError());
		return false;
	}

	LARGE_INTEGER file_size = { 0 };
	//file_size.LowPart = 0;
	//file_size.HighPart = 1;
	file_size.QuadPart = (1024 * 1024) * size_in_mb;

	if (!SetFilePointerEx(file_handle, file_size, NULL, FILE_BEGIN))
	{
		print("err ] SetFilePointerEx() failed. gle = %u", GetLastError());

		CloseHandle(file_handle);
		return false;
	}

	SetEndOfFile(file_handle);
	CloseHandle(file_handle);
	return true;
}
Exemplo n.º 10
0
/**
* @brief
* @param
* @see
* @remarks
* @code
* @endcode
* @return
**/
pmap_context create_map_context(_In_ const wchar_t* file_path, _In_ uint32_t file_size)
{
	_ASSERTE(NULL != file_path);
	if (NULL == file_path) return false;
	if (is_file_existsW(file_path))
	{
		DeleteFileW(file_path);
	}

	pmap_context ctx = (pmap_context)malloc(sizeof(map_context));
	RtlZeroMemory(ctx, sizeof(map_context));

	bool ret = false;

#pragma warning(disable: 4127)
	do
	{
		ctx->handle = CreateFileW(
			(LPCWSTR)file_path,
			GENERIC_READ | GENERIC_WRITE,
			NULL,
			NULL,
			CREATE_NEW,
			FILE_ATTRIBUTE_NORMAL,
			NULL
			);
		if (INVALID_HANDLE_VALUE == ctx->handle)
		{
			print("err ] CreateFile( %ws ) failed. gle = %u", file_path, GetLastError());
			break;
		}

		ctx->size = file_size;
		ctx->map = CreateFileMapping(
			ctx->handle,
			NULL,
			PAGE_READWRITE,
			0,
			ctx->size,
			NULL
			);
		if (NULL == ctx->map)
		{
			print("err ] CreateFileMapping( %ws ) failed. gle = %u", file_path, GetLastError());
			break;
		}

		ctx->view = (PCHAR)MapViewOfFile(
			ctx->map,
			FILE_MAP_WRITE,
			0,
			0,
			ctx->size
			);
		if (ctx->view == NULL)
		{
			print("err ] MapViewOfFile( %ws ) failed. gle = %u", file_path, GetLastError());
			break;
		}

		ret = true;
	} while (FALSE);
#pragma warning(default: 4127)

	if (!ret)
	{
		if (NULL != ctx->view) UnmapViewOfFile(ctx->view);
		if (NULL != ctx->map) CloseHandle(ctx->map);
		if (INVALID_HANDLE_VALUE != ctx->handle) CloseHandle(ctx->handle);

		free(ctx); ctx = NULL;
	}

	return ctx;
}
Exemplo n.º 11
0
/**
* @brief
* @param
* @see
* @remarks
* @code
* @endcode
* @return
**/
bool read_file_using_memory_map()
{
	// current directory 를 구한다.
	wchar_t *buf = NULL;
	uint64_t buflen = 0;
	buflen = GetCurrentDirectoryW(buflen, buf);
	if (0 == buflen)
	{
		print("err ] GetCurrentDirectoryW() failed. gle = 0x%08x", GetLastError());
		return false;
	}

	buf = (PWSTR)malloc(sizeof(WCHAR) * buflen);
	if (0 == GetCurrentDirectoryW(buflen, buf))
	{
		print("err ] GetCurrentDirectoryW() failed. gle = 0x%08x", GetLastError());
		free(buf);
		return false;
	}

	// current dir \\ test.txt 파일명 생성
	wchar_t file_name[260];
	if (!SUCCEEDED(StringCbPrintfW(
		file_name,
		sizeof(file_name),
		L"%ws\\test.txt",
		buf)))
	{
		print("err ] can not create file name");
		free(buf);
		return false;
	}
	free(buf); buf = NULL;

	if (true != is_file_existsW(file_name))
	{
		print("err ] no file exists. file = %ws", file_name);
		return false;
	}

	HANDLE file_handle = CreateFileW(
		(LPCWSTR)file_name,
		GENERIC_READ,
		NULL,
		NULL,
		OPEN_EXISTING,
		FILE_ATTRIBUTE_NORMAL,
		NULL
		);
	if (INVALID_HANDLE_VALUE == file_handle)
	{
		print("err ] CreateFile(%ws) failed, gle = %u", file_name, GetLastError());
		return false;
	}

	// check file size
	//
	LARGE_INTEGER fileSize;
	if (TRUE != GetFileSizeEx(file_handle, &fileSize))
	{
		print("err ] GetFileSizeEx(%ws) failed, gle = %u", file_name, GetLastError());
		CloseHandle(file_handle);
		return false;
	}

	// [ WARN ]
	//
	// 4Gb 이상의 파일의 경우 MapViewOfFile()에서 오류가 나거나
	// 파일 포인터 이동이 문제가 됨
	// FilIoHelperClass 모듈을 이용해야 함
	//
	_ASSERTE(fileSize.HighPart == 0);
	if (fileSize.HighPart > 0)
	{
		print("file size = %I64d (over 4GB) can not handle. use FileIoHelperClass",
			fileSize.QuadPart);
		CloseHandle(file_handle);
		return false;
	}

	DWORD file_size = (DWORD)fileSize.QuadPart;
	HANDLE file_map = CreateFileMapping(
		file_handle,
		NULL,
		PAGE_READONLY,
		0,
		0,
		NULL
		);
	if (NULL == file_map)
	{
		print("err ] CreateFileMapping(%ws) failed, gle = %u", file_name, GetLastError());
		CloseHandle(file_handle);
		return false;
	}

	PCHAR file_view = (PCHAR)MapViewOfFile(
		file_map,
		FILE_MAP_READ,
		0,
		0,
		0
		);
	if (file_view == NULL)
	{
		print("err ] MapViewOfFile(%ws) failed, gle = %u", file_name, GetLastError());

		CloseHandle(file_map);
		CloseHandle(file_handle);
		return false;
	}

	// do some io
	char a = file_view[0];  // 0x d9
	char b = file_view[1];  // 0xb3



	// close all
	UnmapViewOfFile(file_view);
	CloseHandle(file_map);
	CloseHandle(file_handle);
	return true;
}
Exemplo n.º 12
0
/**
* @brief
* @param
* @see
* @remarks
* @code
* @endcode
* @return
**/
pmap_context open_map_context(_In_ const wchar_t* file_path)
{
	_ASSERTE(NULL != file_path);
	if (NULL == file_path) return false;
	if (!is_file_existsW(file_path)) return false;;

	pmap_context ctx = (pmap_context)malloc(sizeof(map_context));
	RtlZeroMemory(ctx, sizeof(map_context));

	bool ret = false;

#pragma warning(disable: 4127)
	do
	{
		ctx->handle = CreateFileW(
			(LPCWSTR)file_path,
			GENERIC_READ,
			NULL,
			NULL,
			OPEN_EXISTING,
			FILE_ATTRIBUTE_NORMAL,
			NULL
			);
		if (INVALID_HANDLE_VALUE == ctx->handle)
		{
			print("err ] CreateFile( %ws ) failed. gle = %u", file_path, GetLastError());
			break;
		}

		// check file size
		//
		LARGE_INTEGER fileSize;
		if (TRUE != GetFileSizeEx(ctx->handle, &fileSize))
		{
			print("err ] GetFileSizeEx( %ws ) failed. gle = %u", file_path, GetLastError());
			break;
		}

		// [ WARN ]
		//
		// 4Gb 이상의 파일의 경우 MapViewOfFile()에서 오류가 나거나
		// 파일 포인터 이동이 문제가 됨
		// FilIoHelperClass 모듈을 이용해야 함
		//
		_ASSERTE(fileSize.HighPart == 0);
		if (fileSize.HighPart > 0)
		{
			print("err ] file is too large to map. file = %ws, size = %llu", file_path, fileSize.QuadPart);
			break;
		}

		ctx->size = (DWORD)fileSize.QuadPart;
		ctx->map = CreateFileMapping(
			ctx->handle,
			NULL,
			PAGE_READONLY,
			0,
			0,
			NULL
			);
		if (NULL == ctx->map)
		{
			print("err ] CreateFileMapping( %ws ) failed. gle = %u", file_path, GetLastError());
			break;
		}

		ctx->view = (PCHAR)MapViewOfFile(
			ctx->map,
			FILE_MAP_READ,
			0,
			0,
			0
			);
		if (ctx->view == NULL)
		{
			print("err ] MapViewOfFile( %ws ) failed. gle = %u", file_path, GetLastError());
			break;
		}

		ret = true;
	} while (FALSE);
#pragma warning(default: 4127)

	if (!ret)
	{
		if (NULL != ctx->view) UnmapViewOfFile(ctx->view);
		if (NULL != ctx->map) CloseHandle(ctx->map);
		if (INVALID_HANDLE_VALUE != ctx->handle) CloseHandle(ctx->handle);

		free(ctx); ctx = NULL;
	}

	return ctx;
}
Exemplo n.º 13
0
bool create_bob_txt()
{
	// current directory 를 구한다.
	wchar_t *buf=NULL;
	uint32_t buflen = 0;
	buflen = GetCurrentDirectoryW(buflen, buf);
	if (0 == buflen)
	{
		print("err, GetCurrentDirectoryW() failed. gle = 0x%08x", GetLastError());
		return false;
	}

	buf = (PWSTR) malloc(sizeof(WCHAR) * buflen);
	if (0 == GetCurrentDirectoryW(buflen, buf))
	{
		print("err, GetCurrentDirectoryW() failed. gle = 0x%08x", GetLastError());
		free(buf);
		return false;
	}

	// current dir \\ bob.txt 파일명 생성
	wchar_t file_name[260];
	if (!SUCCEEDED(StringCbPrintfW(
		file_name,
		sizeof(file_name),
		L"%ws\\bob.txt",
		buf)))
	{  
		print("err, can not create file name");
		free(buf);
		return false;
	}


	if (true == is_file_existsW(file_name))
	{
		::DeleteFileW(file_name);
	}

	// 파일 생성
	HANDLE file_handle = CreateFileW(
		file_name,
		GENERIC_WRITE,
		FILE_SHARE_READ,
		NULL,
		CREATE_NEW,
		FILE_ATTRIBUTE_NORMAL,
		NULL); 

	if(file_handle == INVALID_HANDLE_VALUE)
	{                                              
		print("err, CreateFile(path=%ws), gle=0x%08x", file_name, GetLastError());
		return false;
	}


	// 파일에 데이터 쓰기
	DWORD bytes_written = 0;
	wchar_t string_buf[1024];
	if (!SUCCEEDED(StringCbPrintfW(
		string_buf,
		sizeof(string_buf),
		L"동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라만세")))
	{
		print("err, can not create data to write.");
		CloseHandle(file_handle);
		return false;
	}
	char *pUtf8 =NULL;
	int len = UnicodeToUtf8(string_buf,&pUtf8);

	if (!WriteFile(file_handle, pUtf8, len, &bytes_written, NULL))
	{
		print("err, WriteFile() failed. gle = 0x%08x", GetLastError());
		CloseHandle(file_handle);
		return false;
	}

	// 영어로 쓰기
	if (!SUCCEEDED(StringCbPrintfW(
		string_buf,
		sizeof(string_buf),
		L"All work and no play makes jack a dull boy.")))
	{
		print("err, can not create data to write.");
		CloseHandle(file_handle);
		return false;
	}

	free(pUtf8);

	*pUtf8 =NULL;
	len = UnicodeToUtf8(string_buf,&pUtf8);

	if (!WriteFile(file_handle, string_buf, wcslen(string_buf), &bytes_written, NULL))
	{
		print("err, WriteFile() failed. gle = 0x%08x", GetLastError());
		CloseHandle(file_handle);
		return false;
	}




	char string_bufa[1024];


	if (!SUCCEEDED(StringCbPrintfA(
		string_bufa,
		sizeof(string_bufa),
		"동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라만세")))
	{
		print("err, can not create data to write.");
		CloseHandle(file_handle);
		return false;
	}

	free(pUtf8);

	pUtf8 =NULL;
	pUtf8 =ANSIToUTF8(string_bufa);
	len = strlen(pUtf8);


	if (!WriteFile(file_handle, pUtf8, len, &bytes_written, NULL))
	{
		print("err, WriteFile() failed. gle = 0x%08x", GetLastError());
		CloseHandle(file_handle);
		return false;
	}

	// 영어로 쓰기
	if (!SUCCEEDED(StringCbPrintfA(
		string_bufa,
		sizeof(string_bufa),
		"All work and no play makes jack a dull boy.")))
	{
		print("err, can not create data to write.");
		CloseHandle(file_handle);
		return false;
	}

	free(pUtf8);

	pUtf8 =NULL;
	pUtf8 =ANSIToUTF8(string_bufa);
	len = strlen(pUtf8);


	if (!WriteFile(file_handle, string_bufa, strlen(string_bufa), &bytes_written, NULL))
	{
		print("err, WriteFile() failed. gle = 0x%08x", GetLastError());
		CloseHandle(file_handle);
		return false;
	}

	free(pUtf8);

	// 파일 닫기
	CloseHandle(file_handle);

	wchar_t copy_file_name[260];

	if (!SUCCEEDED(StringCbPrintfW(
		copy_file_name,
		sizeof(copy_file_name),
		L"%ws\\bob2.txt",
		buf)))
	{  
		print("err, can not copy file name");
		free(buf);
		return false;
	}
	free(buf); buf = NULL;

	/* BOB.txt -> BOB2.txt 파일 복사 */
	if(!CopyFileW(file_name,copy_file_name,false)){
		print("CopyFileW fail");
		return false;
	}


	/* ReadFile()을 통한 읽기 후 출력*/

	HANDLE read_file_handle = CreateFileW(
		copy_file_name,
		GENERIC_READ,
		FILE_SHARE_READ,
		NULL,
		OPEN_EXISTING,
		0,
		NULL); 

	if(read_file_handle == INVALID_HANDLE_VALUE)
	{                                              
		print("err, CreateFile(path=%ws), gle=0x%08x", read_file_handle, GetLastError());
		return false;
	}

	char read_buf[512];
	char buf_noNull[512];
	char* ansi_buf;

	DWORD result=0;
	
	ReadFile(read_file_handle,read_buf,sizeof(char)*512,&result,NULL);
	
	// read_buf의 글자 사이사이에 있는 NULL값 제거 ( UTF8ToANSI 에서  strlen을 사용하기 때문)
	int j=0;
	for(int i=0;i<256;i++){
		if(read_buf[i] != '\0'){
			buf_noNull[j++] = read_buf[i]; 
		}
	}
	buf_noNull[j]='\0';
	
	// 출력
	ansi_buf=UTF8ToANSI(buf_noNull);
	printf("%s\n",ansi_buf);

	CloseHandle(read_file_handle);


	/* MMIO()을 통한 읽기 후 출력*/

	read_file_handle = CreateFileW(
		copy_file_name,
		GENERIC_READ,
		FILE_SHARE_READ,
		NULL,
		OPEN_EXISTING,
		0,
		NULL); 

	if(read_file_handle == INVALID_HANDLE_VALUE)
	{                                              
		print("err, CreateFile(path=%ws), gle=0x%08x", read_file_handle, GetLastError());
		return false;
	}


	HANDLE file_map = CreateFileMapping(
                            read_file_handle,
                            NULL,
                            PAGE_READONLY,
                            0,
                            0,
                            NULL
                            );
    if (NULL == file_map)
    {
        print("err, CreateFileMapping(%ws) failed, gle = %u", file_name, GetLastError());
        CloseHandle(read_file_handle);
        return false;
    }
 
    PCHAR file_view = (PCHAR) MapViewOfFile(
                                    file_map,
                                    FILE_MAP_READ,
                                    0,
                                    0,
                                    0
                                    );
    if(file_view == NULL)
    {
        print("err, MapViewOfFile(%ws) failed, gle = %u", file_name, GetLastError());
       
        CloseHandle(file_map);
        CloseHandle(read_file_handle);
        return false;
    }

	// read_buf의 글자 사이사이에 있는 NULL값 제거 ( UTF8ToANSI 에서  strlen을 사용하기 때문)
	
	j=0;
	for(int i=0;i<256;i++){
		if(read_buf[i] != '\0'){
			buf_noNull[j++] = file_view[i]; 
		}
	}
	buf_noNull[j]='\0';
	
	// 출력
	ansi_buf=UTF8ToANSI(buf_noNull);
	printf("%s\n",ansi_buf);


	UnmapViewOfFile(file_view);
    CloseHandle(file_map);
	CloseHandle(read_file_handle);

	/* BOB.txt 파일 삭제*/



	::DeleteFileW(file_name);

	return true;

}
Exemplo n.º 14
0
/**----------------------------------------------------------------------------
\brief  파일 IO 를 위해 파일을 오픈한다.

\param
\return
\code

\endcode
-----------------------------------------------------------------------------*/
DTSTATUS
FileIoHelper::FIOpenForRead(
IN std::wstring FilePath
)
{
	if (TRUE == Initialized()) { FIOClose(); }

	mReadOnly = TRUE;
	if (TRUE != is_file_existsW(FilePath.c_str()))
	{
		printf(
			"no file exists. file=%ws", FilePath.c_str()
			);
		return DTS_NO_FILE_EXIST;
	}

#pragma warning(disable: 4127)
	DTSTATUS status = DTS_WINAPI_FAILED;
	do
	{
		mFileHandle = CreateFileW(
			FilePath.c_str(),
			GENERIC_READ,
			NULL,
			NULL,
			OPEN_EXISTING,
			FILE_ATTRIBUTE_NORMAL,
			NULL
			);
		if (INVALID_HANDLE_VALUE == mFileHandle)
		{
			printf(
				"CreateFile(%ws) failed, gle=0x%08x",
				FilePath.c_str(),
				GetLastError()
				);
			break;
		}

		// check file size 
		// 
		if (TRUE != GetFileSizeEx(mFileHandle, &mFileSize))
		{
			printf(
				"%ws, can not get file size, gle=0x%08x",
				FilePath.c_str(),
				GetLastError()
				);
			break;
		}

		mFileMap = CreateFileMapping(
			mFileHandle,
			NULL,
			PAGE_READONLY,
			0,
			0,
			NULL
			);
		if (NULL == mFileMap)
		{
			printf(
				"CreateFileMapping(%ws) failed, gle=0x%08x",
				FilePath.c_str(),
				GetLastError()
				);
			break;
		}

		status = DTS_SUCCESS;
	} while (FALSE);
#pragma warning(default: 4127)

	if (TRUE != DT_SUCCEEDED(status))
	{
		if (INVALID_HANDLE_VALUE != mFileHandle)
		{
			CloseHandle(mFileHandle);
			mFileHandle = INVALID_HANDLE_VALUE;
		}
		if (NULL != mFileMap) CloseHandle(mFileMap);
	}

	return status;
}
Exemplo n.º 15
0
bool create_bob_txt()
{
    // current directory 를 구한다.
    wchar_t *buf=NULL;
    uint32_t buflen = 0;
    buflen = GetCurrentDirectoryW(buflen, buf);
        if (0 == buflen)
        {
        print("err, GetCurrentDirectoryW() failed. gle = 0x%08x", GetLastError());
        return false;
        }
 
        buf = (PWSTR) malloc(sizeof(WCHAR) * buflen);
        if (0 == GetCurrentDirectoryW(buflen, buf))
        {
                print("err, GetCurrentDirectoryW() failed. gle = 0x%08x", GetLastError());
                free(buf);
                return false;
        }
 
    // current dir \\ bob.txt 파일명 생성
    wchar_t file_name[260];
    if (!SUCCEEDED(StringCbPrintfW(
                            file_name,
                            sizeof(file_name),
                            L"%ws\\bob.txt",
                            buf)))
    {  
        print("err, can not create file name");
        free(buf);
        return false;
    }
    free(buf); buf = NULL;
 
    if (true == is_file_existsW(file_name))
    {
        ::DeleteFileW(file_name);
    }
 
    // 파일 생성
    HANDLE file_handle = CreateFileW(
                                file_name,
                                                        GENERIC_WRITE,
                                                        FILE_SHARE_READ,
                                                        NULL,
                                                        CREATE_NEW,
                                                        FILE_ATTRIBUTE_NORMAL,
                                                        NULL); 
        if(file_handle == INVALID_HANDLE_VALUE)
        {                                              
        print("err, CreateFile(path=%ws), gle=0x%08x", file_name, GetLastError());
        return false;
        }
 
    // 파일에 데이터 쓰기
    DWORD bytes_written = 0;
    wchar_t string_buf[1024];
    if (!SUCCEEDED(StringCbPrintfW(
                        string_buf,
                        sizeof(string_buf),
                        L"동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라만세")))
    {
        print("err, can not create data to write.");
        CloseHandle(file_handle);
        return false;
    }
 
    if (!WriteFile(file_handle, string_buf, wcslen(string_buf), &bytes_written, NULL))
    {
        print("err, WriteFile() failed. gle = 0x%08x", GetLastError());
        CloseHandle(file_handle);
        return false;
    }
 
    // 영어로 쓰기
    if (!SUCCEEDED(StringCbPrintfW(
                        string_buf,
                        sizeof(string_buf),
                        L"All work and no play makes jack a dull boy.")))
    {
        print("err, can not create data to write.");
        CloseHandle(file_handle);
        return false;
    }
 
    if (!WriteFile(file_handle, string_buf, wcslen(string_buf), &bytes_written, NULL))
    {
        print("err, WriteFile() failed. gle = 0x%08x", GetLastError());
        CloseHandle(file_handle);
        return false;
    }
 
 
 
 
    char string_bufa[1024];
    if (!SUCCEEDED(StringCbPrintfA(
                        string_bufa,
                        sizeof(string_bufa),
                        "동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라만세")))
    {
        print("err, can not create data to write.");
        CloseHandle(file_handle);
        return false;
    }
 
    if (!WriteFile(file_handle, string_bufa, strlen(string_bufa), &bytes_written, NULL))
    {
        print("err, WriteFile() failed. gle = 0x%08x", GetLastError());
        CloseHandle(file_handle);
        return false;
    }
 
    // 영어로 쓰기
    if (!SUCCEEDED(StringCbPrintfA(
                        string_bufa,
                        sizeof(string_bufa),
                        "All work and no play makes jack a dull boy.")))
    {
        print("err, can not create data to write.");
        CloseHandle(file_handle);
        return false;
    }
 
    if (!WriteFile(file_handle, string_bufa, strlen(string_bufa), &bytes_written, NULL))
    {
        print("err, WriteFile() failed. gle = 0x%08x", GetLastError());
        CloseHandle(file_handle);
        return false;
    }
 
    // 파일 닫기
    CloseHandle(file_handle);
    return true;
 
}
Exemplo n.º 16
0
bool create_bob_txt() {
	wchar_t *buf = NULL;
	uint32_t buflen = 0;
	buflen = GetCurrentDirectoryW(buflen, buf);

	if (buflen == 0) {
		printf("[error] GetCurrentDirectoryW() failed!!! gle = 0x%08x\n", GetLastError());
		return false;
	}

	buf = (PWSTR)malloc(sizeof(WCHAR)*buflen);

	if (GetCurrentDirectoryW(buflen, buf) == 0) {
		printf("[error] GetCurrentDirectoryW() failed!!! gle = 0x%08x\n", GetLastError());
		free(buf);
		return false;
	}

	// current directory\\bob.txt 생성
	wchar_t file_name[260];
	if (!SUCCEEDED(StringCbPrintfW(
		file_name,
		sizeof(file_name),
		L"%ws\\bob.txt",
		buf))) {
		printf("[error] can not create bob.txt\n");
		free(buf);
		return false;
	}
	free(buf);
	buf = NULL;

	if (is_file_existsW(file_name)) {
		DeleteFileW(file_name);
	}

	// 파일 생성
	HANDLE file_handle = CreateFileW(
		file_name,
		GENERIC_WRITE,
		FILE_SHARE_READ,
		NULL,
		CREATE_NEW,
		FILE_ATTRIBUTE_NORMAL,
		NULL);
	/////////////////////////////////////////////////////////
	DWORD numberOfBytesWritten;
	int result;
	unsigned char mark[3];

	mark[0] = 0xEF;
	mark[1] = 0xBB;

	// UTF-8
	mark[2] = 0xBF;	

	wchar_t strUnicode[256] = L"안녕하세요 굳 굳굳 HelloWorld";
	char strUtf8[256] = { 0, };

	if (file_handle == INVALID_HANDLE_VALUE) {
		printf("[error] can not CreateFile, gle=0x%08x\n", GetLastError());
		return false;
	}

	int nlen = WideCharToMultiByte(CP_UTF8, 0, strUnicode, lstrlenW(strUnicode), NULL, 0, NULL, NULL);
	WideCharToMultiByte(CP_UTF8, 0, strUnicode, lstrlenW(strUnicode), strUtf8, nlen, NULL, NULL);

	result = WriteFile(file_handle, &mark, 3, &numberOfBytesWritten, NULL);
	result = WriteFile(file_handle, strUtf8, strlen(strUtf8), &numberOfBytesWritten, NULL);

	// bob.txt -> bob2.txt 파일 복사
	LPCWSTR file_name2 = L"C:\\Users\\kahissa\\Documents\\Visual Studio 2013\\Projects\\Console_test1\\bob2.txt";
	CopyFile(file_name, file_name2, false);


	// bob2.txt 파일 내용 읽기
	char readBuf[256] = { 0, };
	DWORD dwRead = 0;
	BOOL readOK;
	HANDLE file_handle2 = CreateFileW(file_name2, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

	if (file_handle2 == INVALID_HANDLE_VALUE) {
		printf("[error] can not file open, gle=0x%08x\n", GetLastError());
	}

	readOK = ReadFile(file_handle2, readBuf, 256, &dwRead, NULL);	// 파일 내용 읽어서 rBuf에 저장

	if (readOK && dwRead == 0)
		printf("[error] can not read file, gle=0x%08x\n", GetLastError());


	//readBuf에 UTF8 적용
	int len = MultiByteToWideChar(CP_UTF8, 0, readBuf, strlen(readBuf), NULL, NULL);

	wchar_t MultiByte[256] = { 0, };

	// UTF8 -> 유니코드
	MultiByteToWideChar(CP_UTF8, 0, readBuf, strlen(readBuf), MultiByte, len);

	char MultiByte2[256] = { 0, };

	/// 유니코드 -> 멀티바이트
	len = WideCharToMultiByte(CP_ACP, 0, MultiByte, -1, NULL, 0, NULL, NULL);
	WideCharToMultiByte(CP_ACP, 0, MultiByte, -1, MultiByte2, len, NULL, NULL);

	printf("%s\n", MultiByte2 + 1);	// header 다음부터 출력

	CloseHandle(file_handle);
	CloseHandle(file_handle2);

	DeleteFile(file_name);
	DeleteFile(file_name2);

	return true;
}
Exemplo n.º 17
0
/**
* @brief
* @param
* @see
* @remarks
* @code
* @endcode
* @return
**/
bool
file_copy_using_read_write(
_In_ const wchar_t* src_file,
_In_ const wchar_t* dst_file
)
{
	_ASSERTE(NULL != src_file);
	_ASSERTE(NULL != dst_file);
	if (NULL == src_file || NULL == dst_file) return false;

	if (!is_file_existsW(src_file))
	{
		print("err ] no src file = %ws", src_file);
		return false;
	}

	if (is_file_existsW(dst_file))
	{
		DeleteFileW(dst_file);
	}

	// open src file with READ mode
	HANDLE src_handle = CreateFileW(
		src_file,
		GENERIC_READ,
		FILE_SHARE_READ,
		NULL,
		OPEN_EXISTING,
		FILE_ATTRIBUTE_NORMAL,
		NULL
		);
	if (INVALID_HANDLE_VALUE == src_handle)
	{
		print("err ] CreateFile( %ws ) failed. gle = %u", src_file, GetLastError());
		return false;
	}

	// open dst file with WRITE mode
	HANDLE dst_handle = CreateFileW(
		dst_file,
		GENERIC_WRITE,	
		FILE_SHARE_READ,
		NULL,
		CREATE_NEW,
		FILE_ATTRIBUTE_NORMAL,
		NULL
		);
	if (INVALID_HANDLE_VALUE == dst_handle)
	{
		print("err ] CreateFile( %ws ) failed. gle = %u", dst_file, GetLastError());

		CloseHandle(src_handle);
		return false;
	}

	// file copy
	bool ret = false;
	char buf[4096] = { 0 };
	DWORD bytes_written = 0;
	DWORD bytes_read = 0;

	do
	{
		// read from src
		if (!ReadFile(src_handle, buf, sizeof(buf), &bytes_read, NULL))
		{
			print("err ] ReadFile( src_handle ) failed. gle = %u", GetLastError());
			break;
		}
		else
		{
			// please read
			// https://msdn.microsoft.com/en-us/library/windows/desktop/aa365690(v=vs.85).aspx
			if (0 == bytes_read)
			{
				ret = true;
				break;
			}
		}

		// write to dst
		if (!WriteFile(dst_handle, buf, sizeof(buf), &bytes_written, NULL))
		{
			print("err ] WriteFile( dst_handle ) failed. gle = %u", GetLastError());
			break;
		}
	} while (true);


	CloseHandle(src_handle);
	CloseHandle(dst_handle);
	return ret;
}
Exemplo n.º 18
0
bool OpenFileContext(IN PCWSTR FilePath, IN bool ReadOnly, OUT PFILE_CTX& Ctx)
{
	_ASSERTE(NULL != FilePath);
	if (NULL == FilePath) return false;
	if (!is_file_existsW(FilePath)) return false;;

	_ASSERT(NULL == Ctx);
	if (NULL != Ctx) return false;;

	Ctx = (PFILE_CTX)malloc(sizeof(FILE_CTX));
	if (NULL == Ctx) return false;

	RtlZeroMemory(Ctx, sizeof(FILE_CTX));
	bool ret = false;

#pragma warning(disable: 4127)
	do
	{
		Ctx->FileHandle = CreateFileW(
			(LPCWSTR)FilePath,
			(true == ReadOnly) ? GENERIC_READ : GENERIC_READ | GENERIC_WRITE,
			NULL,
			NULL,
			OPEN_EXISTING,
			FILE_ATTRIBUTE_NORMAL,
			NULL
			);
		if (INVALID_HANDLE_VALUE == Ctx->FileHandle)
		{
			print(
				"CreateFile(%ws) failed, gle = %u",
				FilePath,
				GetLastError()
			);
			break;
		}

		// check file size 
		// 
		LARGE_INTEGER fileSize;
		if (TRUE != GetFileSizeEx(Ctx->FileHandle, &fileSize))
		{
			print(
				"%ws, can not get file size, gle = %u",
				FilePath,
				GetLastError()
			);
			break;
		}

		// [ WARN ]
		// 
		// 4Gb 이상의 파일의 경우 MapViewOfFile()에서 오류가 나거나 
		// 파일 포인터 이동이 문제가 됨
		// FilIoHelperClass 모듈을 이용해야 함
		// 
		_ASSERTE(fileSize.HighPart == 0);
		if (fileSize.HighPart > 0)
		{
			print(
				"file size = %I64d (over 4GB) can not handle. use FileIoHelperClass",
				fileSize.QuadPart
			);
			break;
		}

		Ctx->FileSize = (DWORD)fileSize.QuadPart;
		Ctx->FileMap = CreateFileMapping(
			Ctx->FileHandle,
			NULL,
			(true == ReadOnly) ? PAGE_READONLY : PAGE_READWRITE,
			0,
			0,
			NULL
			);
		if (NULL == Ctx->FileMap)
		{
			print(
				"CreateFileMapping(%ws) failed, gle = %u",
				FilePath,
				GetLastError()
			);
			break;
		}

		Ctx->FileView = (PCHAR)MapViewOfFile(
			Ctx->FileMap,
			(true == ReadOnly) ? FILE_MAP_READ : FILE_MAP_WRITE,
			0,
			0,
			0
			);
		if (Ctx->FileView == NULL)
		{
			print(
				"MapViewOfFile(%ws) failed, gle = %u",
				FilePath,
				GetLastError()
			);
			break;
		}

		ret = true;
	} while (FALSE);
#pragma warning(default: 4127)

	if (!ret)
	{
		if (NULL != Ctx->FileView) UnmapViewOfFile(Ctx->FileView);
		if (NULL != Ctx->FileMap) CloseHandle(Ctx->FileMap);
		if (INVALID_HANDLE_VALUE != Ctx->FileHandle) CloseHandle(Ctx->FileHandle);

		free(Ctx);
	}

	return ret;
}
Exemplo n.º 19
0
/// @brief  
bool 
FileInfoCache::initialize(
	_In_ const wchar_t* db_file_path,
	_In_ int64_t cache_size,
	_In_ bool delete_if_exist
	)
{
	_ASSERTE(NULL != db_file_path);
    if (NULL == db_file_path) return false;

	if (true == _initialized) return true;

	if (true == is_file_existsW(db_file_path) && true == delete_if_exist)
    {
        if (!DeleteFileW(db_file_path))
        {
            log_err "DeleteFileW( %ws ) failed. gle = %u", 
				db_file_path, 
				GetLastError()
                log_end;
            return false;
        }
    }
	
	try 
	{
		//
		// 데이터베이스 파일을 열고, precompiled statement 들을 생성한다.
		//

		_db.open(db_file_path);
		
		//
		// "file_hash" 테이블 존재 유무를 체크 한 후 없으면 새로 만든다.
		//
		if (true != _db.tableExists("file_hash"))
		{
			_db.execDML(_create_file_cache);
		}

		if (nullptr != _select_cache_stmt) { delete _select_cache_stmt; }
		if (nullptr != _insert_cache_stmt) { delete _insert_cache_stmt; }
		if (nullptr != _update_cache_stmt) { delete _update_cache_stmt; }
		if (nullptr != _delete_cache_stmt) { delete _delete_cache_stmt; }
		//
		//	statement 객체들을 생성한다. 
		// 
		_select_cache_stmt = _db.compileStatement(_select_file_cache);
		_insert_cache_stmt = _db.compileStatement(_insert_file_cache);
		_update_cache_stmt = _db.compileStatement(_update_file_cache);
		_delete_cache_stmt = _db.compileStatement(_delete_file_cache);
	}
	catch (CppSQLite3Exception& e)
	{
		log_err
			"sqlite exception. FileInfoCache::initialize, code = %d, msg = %s",
			e.errorCode(),
			e.errorMessage()
		log_end;
		return false;
	}

	// 캐시 사이즈 초기화
	_cache_size = cache_size;

    _initialized = true;
    return true;
}
Exemplo n.º 20
0
bool
file_copy_using_memory_map_extended(
    _In_ const wchar_t* src_file,
    _In_ const wchar_t* dst_file
)
{
    _ASSERTE(NULL != src_file);
    _ASSERTE(NULL != dst_file);
    if (NULL == src_file || NULL == dst_file) return false;

    if (!is_file_existsW(src_file))
    {
        print("err ] no src file = %ws", src_file);
        return false;
    }

    if (is_file_existsW(dst_file))
    {
        //print("err ] des file already exists = %ws", dst_file);
        //return false;
        DeleteFileW(dst_file);
    }

    bool ret = true;

    pmap_context src_ctx = (pmap_context)malloc(sizeof(map_context));
    pmap_context dst_ctx = (pmap_context)malloc(sizeof(map_context));
    RtlZeroMemory(src_ctx, sizeof(map_context));
    RtlZeroMemory(dst_ctx, sizeof(map_context));

    /* src */
    src_ctx->handle = CreateFile(src_file,
                                 GENERIC_READ, NULL, NULL,
                                 OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    if (INVALID_HANDLE_VALUE == src_ctx->handle)
    {
        print("err ] CreateFile( %ws ) failed. gle = %u", src_file, GetLastError());
        return false;
    }

    LARGE_INTEGER fileSize;
    if (TRUE != GetFileSizeEx(src_ctx->handle, &fileSize))
    {
        print("err ] GetFileSizeEx( %ws ) failed. gle = %u", src_file, GetLastError());
        ret = false;
        goto clean1;
    }

    src_ctx->map = CreateFileMapping(src_ctx->handle, NULL, PAGE_READONLY,
                                     0, 0, NULL);

    if (NULL == src_ctx->map)
    {
        print("err ] CreateFileMapping( %ws ) failed. gle = %u", src_file, GetLastError());
        ret = false;
        goto clean1;
    }

    /* dst */
    dst_ctx->handle = CreateFile(dst_file,
                                 GENERIC_READ | GENERIC_WRITE, NULL, NULL,
                                 CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
    if (INVALID_HANDLE_VALUE == dst_ctx->handle)
    {
        print("err ] CreateFile( %ws ) failed. gle = %u", dst_file, GetLastError());
        ret = false;
        goto clean2;
    }

    dst_ctx->map = CreateFileMapping(dst_ctx->handle, NULL, PAGE_READWRITE,
                                     fileSize.HighPart, fileSize.LowPart, NULL);
    if (NULL == dst_ctx->map)
    {
        print("err ] CreateFileMapping( %ws ) failed. gle = %u", dst_file, GetLastError());
        ret = false;
        goto clean3;
    }

    uint32_t blockSize = 512 * MB;
    uint64_t curOffset = 0;

    /* iterated copy */
    while (curOffset < (uint64_t)fileSize.QuadPart) {
        /* if remaining block is less than blocksize */
        if (blockSize >(uint64_t)fileSize.QuadPart - curOffset) {
            blockSize = (uint64_t)fileSize.QuadPart - curOffset;
        }

        /* src */
        src_ctx->view = (PCHAR)MapViewOfFile(src_ctx->map, FILE_MAP_READ, 0, 0,	blockSize);
        if (NULL == src_ctx->view)
        {
            print("err ] MapViewOfFile( %ws ) failed. gle = %u", src_file, GetLastError());
            ret = false;
            goto clean4;
        }

        /* dst */
        dst_ctx->view = (PCHAR)MapViewOfFile(dst_ctx->map, FILE_MAP_WRITE,
                                             curOffset >> 32,
                                             curOffset & 0xffffffff,
                                             blockSize);
        if (NULL == dst_ctx->view)
        {
            print("err ] MapViewOfFile( %ws ) failed. gle = %u", dst_file, GetLastError());
            ret = false;
            goto clean5;
        }

        /* copy */
        memcpy(dst_ctx->view, src_ctx->view, blockSize);

        UnmapViewOfFile(dst_ctx->view);
clean5:
        UnmapViewOfFile(src_ctx->view);
        if (!ret) break;

        curOffset += blockSize;
    }
clean4:
    CloseHandle(dst_ctx->map);
clean3:
    CloseHandle(src_ctx->map);
clean2:
    CloseHandle(src_ctx->handle);
clean1:
    CloseHandle(dst_ctx->handle);

    free(src_ctx);
    free(dst_ctx);

    return ret;
}
Exemplo n.º 21
0
/**
* @brief
* @param
* @see
* @remarks
* @code
* @endcode
* @return
**/
bool create_bob_txt()
{
	// current directory 를 구한다.
	wchar_t *buf = NULL;
	uint32_t buflen = 0;
	buflen = GetCurrentDirectoryW(buflen, buf);
	if (0 == buflen)
	{
		print("err, GetCurrentDirectoryW() failed. gle = 0x%08x", GetLastError());
		return false;
	}

	buf = (PWSTR)malloc(sizeof(WCHAR) * buflen);
	if (0 == GetCurrentDirectoryW(buflen, buf))
	{
		print("err, GetCurrentDirectoryW() failed. gle = 0x%08x", GetLastError());
		free(buf);
		return false;
	}

	// current dir \\ bob.txt 파일명 생성
	wchar_t file_name[260];
	if (!SUCCEEDED(StringCbPrintfW(
		file_name,
		sizeof(file_name),
		L"%ws\\bob.txt",
		buf)))
	{
		print("err, can not create file name");
		free(buf);
		return false;
	}
	// current dir \\ bob2.txt 파일명 생성
	wchar_t file_name2[260];
	if (!SUCCEEDED(StringCbPrintfW(
		file_name2,
		sizeof(file_name2),
		L"%ws\\bob2.txt",
		buf)))
	{
		print("err, can not create file name");
		free(buf);
		return false;
	}


	free(buf); buf = NULL;


	if (true == is_file_existsW(file_name))
	{
		::DeleteFileW(file_name);
	}

	if (true == is_file_existsW(file_name2))
	{
		::DeleteFileW(file_name);
	}

	// 파일 생성
	HANDLE file_handle = CreateFileW(
		file_name,
		GENERIC_WRITE,
		FILE_SHARE_READ,
		NULL,
		CREATE_NEW,
		FILE_ATTRIBUTE_NORMAL,
		NULL);
	if (file_handle == INVALID_HANDLE_VALUE)
	{
		print("err, CreateFile(path=%ws), gle=0x%08x", file_name, GetLastError());
		return false;
	}

	// 파일에 데이터 쓰기
	DWORD bytes_written = 0;
	wchar_t string_buf[1024];
	if (!SUCCEEDED(StringCbPrintfW(
		string_buf,
		sizeof(string_buf),
		L"bob 베스트 오브 더 베스트 bob")))
	{
		print("err, can not create data to write.");
		CloseHandle(file_handle);
		return false;
	}

	if (!WriteFile(file_handle, string_buf, wcslen(string_buf)*2, &bytes_written, NULL))
	{
		print("err, WriteFile() failed. gle = 0x%08x", GetLastError());
		CloseHandle(file_handle);
		return false;
	}

	// 파일 닫기
	CloseHandle(file_handle);

	// 파일 복사
	if (!CopyFile(file_name, file_name2 , false))
		printf("복사 실패? \n");


	// 파일 읽기
	HANDLE file_handle2 = CreateFileW(
		file_name2,
		GENERIC_READ,
		FILE_SHARE_READ,
		NULL,
		OPEN_EXISTING,
		FILE_ATTRIBUTE_NORMAL,
		NULL);
	if (file_handle2 == INVALID_HANDLE_VALUE)
	{
		print("%ws 를 읽어오지 못했습니다.", file_name2);
		return false;
	}
	DWORD bytes_read;
	wchar_t string_buf2[1024];
	memset(string_buf2, NULL, sizeof(string_buf2));

	if (!ReadFile(file_handle2, string_buf2, sizeof(string_buf2), &bytes_read, NULL))
	{
		printf("파일을 읽어오지 못했습니다!");
		CloseHandle(file_handle2);
	}

	// wchar -> mbs 변환
	int wcstrsize = wcslen(string_buf2) * 2 + 1;
	int mbstrsize = WideCharToMultiByte(CP_ACP, 0, string_buf2, -1, NULL, 0, NULL, NULL);
	char* mbstr;
	mbstr = new char[mbstrsize+1];
	WideCharToMultiByte(CP_ACP, 0, string_buf2, -1, mbstr, mbstrsize, 0, 0);

	printf("%ws\n-> %s\n\n", file_name2, mbstr);

	// mmio 시작

	// 파일 열기

	// mmio 를 위한 filesize 체크
	LARGE_INTEGER fileSize;
	if (!GetFileSizeEx(file_handle2, &fileSize))
	{
		print("err, GetFileSizeEx(%ws) failed, gle = %u", file_name2, GetLastError());
		CloseHandle(file_handle2);
		return false;
	}

	// file size가 4GB가 넘는지 확인 
	// 파일이 4GB보다 크면 Memory상에 올려 화인하는데 오류가 생길 수 있음.
	_ASSERTE(fileSize.HighPart == 0);
	if (fileSize.HighPart > 0)
	{
		print("file size = %I64d (over 4GB) can not handle. use FileIoHelperClass",
			fileSize.QuadPart);
		CloseHandle(file_handle2);
		return false;
	}

	DWORD file_size = (DWORD)fileSize.QuadPart;
	HANDLE file_map = CreateFileMapping(
		file_handle2,
		NULL,
		PAGE_READONLY,
		0,
		0,
		NULL
		);

	if (NULL == file_map)
	{
		print("err, CreateFileMapping(%ws) failed, gle = %u", file_name2, GetLastError());
		CloseHandle(file_handle2);
		return false;
	}

	PCHAR file_view = (PCHAR)MapViewOfFile(
		file_map,
		FILE_MAP_READ,
		0,
		0,
		0
		);
	if (file_view == NULL)
	{
		print("err, MapViewOfFile(%ws) failed, gle = %u", file_name2, GetLastError());

		CloseHandle(file_map);
		CloseHandle(file_handle2);
		return false;
	}

	wchar_t mmio_get_string_buf[1024];
	memset(mmio_get_string_buf, NULL, sizeof(mmio_get_string_buf));
	int i;
	unsigned char b1, b2;
	for (i = 0; i < file_size/2; i++)
	{
		b1 = (unsigned char)file_view[2 * i];
		b2 = (unsigned char)file_view[2 * i+1];
		mmio_get_string_buf[i] = b2*256+b1;
	}

	// wchar -> mbs 변환
	int mmio_wcstrsize = file_size + 1;
	int mmio_mbstrsize = WideCharToMultiByte(CP_ACP, 0, mmio_get_string_buf, -1, NULL, 0, NULL, NULL);
	char* mmio_mbstr;
	mmio_mbstr = new char[mmio_mbstrsize + 1];
	WideCharToMultiByte(CP_ACP, 0, mmio_get_string_buf, -1, mmio_mbstr, mmio_mbstrsize, 0, 0);

	printf("mmio : %ws\n-> %s\n\n", file_name2, mmio_mbstr);


	UnmapViewOfFile(file_view);
	CloseHandle(file_map);
	CloseHandle(file_handle2);

	if (!DeleteFile(file_name))
	{
		printf("%ws 파일을 지우는데 실패했습니다 ", file_name);
	}

	if (!DeleteFile(file_name2))
	{
		printf("%ws 파일을 지우는데 실패했습니다 ", file_name2);
	}


	return true;

}
Exemplo n.º 22
0
/**
* @brief
* @param
* @see
* @remarks
* @code
* @endcode
* @return
**/
bool
file_copy_using_memory_map(
_In_ const wchar_t* src_file,
_In_ const wchar_t* dst_file
)
{
	_ASSERTE(NULL != src_file);
	_ASSERTE(NULL != dst_file);
	if (NULL == src_file || NULL == dst_file) return false;

	if (!is_file_existsW(src_file))
	{
		print("err ] no src file = %ws", src_file);
		return false;
	}

	if (is_file_existsW(dst_file))
	{
		DeleteFileW(dst_file);
	}

	static DWORD AllocationGranularity = 0;
	if (0 == AllocationGranularity)
	{
		SYSTEM_INFO si = { 0 };
		GetSystemInfo(&si);
		AllocationGranularity = si.dwAllocationGranularity;
	}


	pmap_context src_ctx = open_map_context(src_file);
	pmap_context dest_ctx = user_create_map_context(dst_file, src_ctx->size);

	LARGE_INTEGER FileOffset = { 0 };
	LARGE_INTEGER FileSize = { dest_ctx->size };
	LARGE_INTEGER i = { 0 };
	LARGE_INTEGER BytesInBlock = { 0 };

	PUCHAR buffer = (PUCHAR)malloc((uint64_t)(1024 * 1024));
	while (FileSize.QuadPart > 0)
	{
		BytesInBlock.QuadPart = AllocationGranularity * 1;
		if (FileSize.QuadPart < AllocationGranularity * 1)
		{
			BytesInBlock.QuadPart = FileSize.QuadPart;
		}

		dest_ctx->view = (PCHAR)MapViewOfFile(
			dest_ctx->map,
			FILE_MAP_WRITE,
			(FileOffset.HighPart),
			(FileOffset.LowPart),
			BytesInBlock.QuadPart
			);
		if (dest_ctx->view == NULL)
		{
			print("err ] MapViewOfFile( %ws ) failed. gle = %u", dst_file, GetLastError());
			break;
		}
		
		RtlCopyMemory(buffer, &src_ctx->view[FileOffset.QuadPart], BytesInBlock.QuadPart);
		RtlCopyMemory(&dest_ctx->view[FileOffset.QuadPart], buffer, BytesInBlock.QuadPart);

		UnmapViewOfFile(dest_ctx->view);

		FileOffset.QuadPart += BytesInBlock.QuadPart;
		FileSize.QuadPart -= BytesInBlock.QuadPart;

	}

	CloseHandle(dest_ctx->map);
	CloseHandle(dest_ctx->handle);

	return true;
}
Exemplo n.º 23
0
/**
 * @brief
 * @param      
 * @see        
 * @remarks    
 * @code               
 * @endcode    
 * @return     
**/
bool create_bob_txt()
{
    // current directory 를 구한다.
    wchar_t *buf=NULL;
    uint32_t buflen = 0;
    buflen = GetCurrentDirectoryW(buflen, buf);
        if (0 == buflen)
        {
        print("err, GetCurrentDirectoryW() failed. gle = 0x%08x", GetLastError());
        return false;
        }
 
        buf = (PWSTR) malloc(sizeof(WCHAR) * buflen);
        if (0 == GetCurrentDirectoryW(buflen, buf))
        {
                print("err, GetCurrentDirectoryW() failed. gle = 0x%08x", GetLastError());
                free(buf);
                return false;
        }
 
    // current dir \\ bob.txt 파일명 생성
    wchar_t file_name[260];
    if (!SUCCEEDED(StringCbPrintfW(
                            file_name,
                            sizeof(file_name),
                            L"%ws\\bob.txt",
                            buf)))
    {  
        print("err, can not create file name");
        free(buf);
        return false;
    }
    free(buf); buf = NULL;
 
    if (true == is_file_existsW(file_name))
    {
        ::DeleteFileW(file_name);
    }
 
    // 파일 생성
    HANDLE file_handle = CreateFileW(
                                file_name,
                                                        GENERIC_WRITE,
                                                        FILE_SHARE_READ,
                                                        NULL,
                                                        CREATE_NEW,
                                                        FILE_ATTRIBUTE_NORMAL,
                                                        NULL); 
        if(file_handle == INVALID_HANDLE_VALUE)
        {                                              
        print("err, CreateFile(path=%ws), gle=0x%08x", file_name, GetLastError());
        return false;
        }

    // 파일에 데이터 쓰기
    DWORD bytes_written = 0;
    wchar_t string_buf[1024];
	char string_buf_utf8[1024] ={0,};
    if (!SUCCEEDED(StringCbPrintfW(
                        string_buf,
                        sizeof(string_buf),
                        L"가갸거겨고교구규그기 ABCDEFGHIJKLMNOPQRSTUVWXYZ")))
    {
        print("err, can not create data to write.");
        CloseHandle(file_handle);
        return false;
    }
 
	//유니코드-> UTF-8

	int nLen = WideCharToMultiByte(CP_UTF8, 0, string_buf, lstrlenW(string_buf), NULL, 0, NULL, NULL);
	WideCharToMultiByte (CP_UTF8, 0, string_buf, lstrlenW(string_buf), string_buf_utf8, nLen, NULL, NULL);


    if (!WriteFile(file_handle, string_buf_utf8, strlen(string_buf_utf8), &bytes_written, NULL))
    {
        print("err, WriteFile() failed. gle = 0x%08x", GetLastError());
        CloseHandle(file_handle);
        return false;
    }

 
    // 파일 닫기
    CloseHandle(file_handle);
    return true;
 }
Exemplo n.º 24
0
int _tmain(int argc, _TCHAR* argv[])
{

	// current directory 를 구한다.
	wchar_t *buf = NULL;
	uint32_t buflen = 0;
	buflen = GetCurrentDirectoryW(buflen, buf);
	if (0 == buflen)
	{
		print("err ] GetCurrentDirectoryW() failed. gle = 0x%08x", GetLastError());
		return false;
	}

	buf = (PWSTR)malloc(sizeof(WCHAR) * buflen);
	if (0 == GetCurrentDirectoryW(buflen, buf))
	{
		print("err ] GetCurrentDirectoryW() failed. gle = 0x%08x", GetLastError());
		free(buf);
		return false;
	}

	// current dir \\ test.txt 파일명 생성
	wchar_t file_name[260];
	if (!SUCCEEDED(StringCbPrintfW(
		file_name,
		sizeof(file_name),
		L"%ws\\test.txt",
		buf)))
	{
		print("err ] can not create file name");
		free(buf);
		return false;
	}

	// current dir \\ test2.txt 파일명 생성
	wchar_t file_name2[260];
	if (!SUCCEEDED(StringCbPrintfW(
		file_name2,
		sizeof(file_name2),
		L"%ws\\test2.txt",
		buf)))
	{
		print("err ] can not create file name");
		free(buf);
		return false;
	}

	free(buf); buf = NULL;

	FileIoHelper MMIOFILE;
	FileIoHelper MMIOFILE2;
	LARGE_INTEGER file_size;
	LARGE_INTEGER offset;
	PUCHAR buff;

	offset.QuadPart = 0;

	if (is_file_existsW(file_name))
	{
		MMIOFILE.FIOpenForRead(file_name);
		file_size = *MMIOFILE.FileSize();
	}
	else
	{
		file_size.QuadPart = (unsigned long long)1 * 501 * 1024 * 1024;
		MMIOFILE.FIOCreateFile(file_name, file_size);
	}

	MMIOFILE2.FIOCreateFile(file_name2, file_size);
	// 복사의 개념과는 약간 다른 것 같지만 복사를 하기 위해 먼저 같은 크기의 파일을 생성한 다음 내부 데이터를 덮어씌우는 형태로 구현하였다.


	// copy
	buff = (PUCHAR) malloc((500 * 1024 * 1024 + 1)*sizeof(UCHAR));
	while (1)
	{
		if (offset.QuadPart + 500 * 1024 * 1024 < file_size.QuadPart)
		{
			MMIOFILE.FIOReadFromFile(offset, 500 * 1024 * 1024, buff);
			MMIOFILE2.FIOWriteToFile(offset, 500 * 1024 * 1024, buff);
			offset.QuadPart += 500 * 1024 * 1024;
		}
		else
		{
			MMIOFILE.FIOReadFromFile(offset, file_size.QuadPart - offset.QuadPart, buff);
			MMIOFILE2.FIOWriteToFile(offset, file_size.QuadPart - offset.QuadPart, buff);
			offset.QuadPart = file_size.QuadPart;
			break;
		}
	}

	return 0;
}
Exemplo n.º 25
0
/**
* @brief
* @param
* @see
* @remarks
* @code
* @endcode
* @return
**/
bool create_bob_txt()
{
	

	wchar_t *buf = NULL;
	uint32_t buflen = 0;
	buflen = GetCurrentDirectoryW(buflen, buf);
	if (0 == buflen)
	{
		print("err, GetCurrentDirectoryW() failed. gle = 0x%08x", GetLastError());
		return false;
	}

	buf = (PWSTR)malloc(sizeof(WCHAR)* buflen);
	if (0 == GetCurrentDirectoryW(buflen, buf))
	{
		print("err, GetCurrentDirectoryW() failed. gle = 0x%08x", GetLastError());
		free(buf);
		return false;
	}

	
	wchar_t file_name[260];
	wchar_t copy_name[260];

	if (!SUCCEEDED(StringCbPrintfW(
		file_name,
		sizeof(file_name),
		L"%ws\\bob.txt",
		buf)))
	{
		print("err, can not create file name");
		free(buf);
		return false;
	}

	if (!SUCCEEDED(StringCbPrintfW(
		copy_name,
		sizeof(copy_name),
		L"%ws\\bob2.txt",
		buf)))
	{
		print("err, can not copy file name");
		free(buf);
		return false;
	}


	free(buf); buf = NULL;

	if (true == is_file_existsW(file_name))
	{
		::DeleteFileW(file_name);
	}


	HANDLE file_handle = CreateFileW(
		file_name,
		GENERIC_WRITE,
		FILE_SHARE_READ,
		NULL,
		CREATE_NEW,
		FILE_ATTRIBUTE_NORMAL,
		NULL);
	if (file_handle == INVALID_HANDLE_VALUE)
	{
		print("err, CreateFile(path=%ws), gle=0x%08x", file_name, GetLastError());
		return false;
	}


	DWORD bytes_written = 0;
	wchar_t string_buf[1024];
	if (!SUCCEEDED(StringCbPrintfW(
		string_buf,
		sizeof(string_buf),
		L"ddfsjjkfhkse 가나다라마바사아자차카타파하")))
	{
		print("err, can not create data to write.");
		CloseHandle(file_handle);
		return false;
	}

	char strUtf8[1024];
	int nLen = WideCharToMultiByte(CP_UTF8, 0, string_buf, lstrlenW(string_buf), NULL, 0, NULL, NULL);
	WideCharToMultiByte(CP_UTF8, 0, string_buf, lstrlenW(string_buf), strUtf8, nLen, NULL, NULL);

	if (!WriteFile(file_handle, strUtf8, nLen, &bytes_written, NULL))
	{
		print("err, WriteFile() failed. gle = 0x%08x", GetLastError());
		CloseHandle(file_handle);
		return false;
	}


	CloseHandle(file_handle);

	CopyFileW(file_name, copy_name, NULL);

	HANDLE copy_handle = CreateFileW(
		copy_name,
		GENERIC_READ,
		FILE_SHARE_READ,
		NULL,
		OPEN_EXISTING,
		FILE_ATTRIBUTE_NORMAL,
		NULL);

	if (file_handle == INVALID_HANDLE_VALUE)
	{
		print("err, CreateFile(path=%ws), gle=0x%08x", file_name, GetLastError());
		return false;
	}
	wchar_t data[1024] = { 0 };
	char strUtf[1024] = { 0 };
	char asc[1024];
	ReadFile(copy_handle, strUtf, sizeof(strUtf), &bytes_written, NULL);
	CloseHandle(copy_handle);

	int nLen2 = MultiByteToWideChar(CP_UTF8, 0, strUtf, strlen(strUtf), NULL, NULL);
	MultiByteToWideChar(CP_UTF8, 0, strUtf, strlen(strUtf), data, nLen2);
	int len = WideCharToMultiByte(CP_ACP, 0, data, -1, NULL, 0, NULL, NULL);
	WideCharToMultiByte(CP_ACP, 0, data, -1, asc, len, NULL, NULL);
	printf("%s\n", asc);

	HANDLE copy_handle2 = CreateFileW(
		(LPCWSTR)copy_name,
		GENERIC_READ,
		NULL,
		NULL,
		OPEN_EXISTING,
		FILE_ATTRIBUTE_NORMAL,
		NULL
		);
	if (INVALID_HANDLE_VALUE == copy_handle2)
	{
		print("err, CreateFile(%ws) failed, gle = %u", file_name, GetLastError());
		return false;
	}

	HANDLE file_map = CreateFileMapping(
		copy_handle2,
		NULL,
		PAGE_READONLY,
		0,
		0,
		NULL
		);
	if (NULL == file_map)
	{
		print("err, CreateFileMapping(%ws) failed, gle = %u", file_name, GetLastError());
		CloseHandle(copy_handle2);
		return false;
	}

	PCHAR file_view = (PCHAR)MapViewOfFile(
		file_map,
		FILE_MAP_READ,
		0,
		0,
		0
		);
	if (file_view == NULL)
	{
		print("err, MapViewOfFile(%ws) failed, gle = %u", file_name, GetLastError());

		CloseHandle(file_map);
		CloseHandle(file_handle);
		return false;
	}

	wchar_t data2[1024] = { 0 };
	char asc2[1024] = { 0 };

	int nLen3 = MultiByteToWideChar(CP_UTF8, 0, file_view, strlen(file_view), NULL, NULL);
	MultiByteToWideChar(CP_UTF8, 0, file_view, strlen(file_view), data2, nLen3);
	int len2 = WideCharToMultiByte(CP_ACP, 0, data2, -1, NULL, 0, NULL, NULL);
    WideCharToMultiByte(CP_ACP, 0, data2, -1, asc, len2, NULL, NULL);
	printf("%s\n", asc);

	UnmapViewOfFile(file_view);
	CloseHandle(file_map);
	CloseHandle(copy_handle2);

	DeleteFile(file_name);
	DeleteFile(copy_name);
	return true;

}