创建一个打开窗口,并执行文件内容反转

14 篇文章 1 订阅

创建一个打开窗口,并执行文件内容反转,并且把反转后的内容在记事本展示。

void CFileReverseDlg::OnBnClickedFileRevereButton()
{
	// TODO: 在此添加控件通知处理程序代码
	BOOL bIsTextUnicode;
	BOOL bRet;
	CString Filename;
	m_filePath.GetWindowTextW(Filename);
	if (!Filename.IsEmpty())
	{		
		CopyFile(Filename, FILENAME, FALSE);
		bRet = FileReverse(FILENAME, bIsTextUnicode);
		if (bRet)
		{
			if (bIsTextUnicode)
			{
				AfxMessageBox(_T("文件字符编码方式为UNICODE。"));
			}
			else
			{
				AfxMessageBox(_T("文件字符编码方式为ANSI。"));
			}
		}
		STARTUPINFO si = { sizeof(si) };
		PROCESS_INFORMATION pi;
		TCHAR sz[] = TEXT("Notepad ") FILENAME;
		if (CreateProcess(NULL, sz, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
		{
			CloseHandle(pi.hThread);
			CloseHandle(pi.hProcess);
		}

	}
	
}

文件映射内容反转实现:

BOOL CFileReverseDlg::FileReverse(const CString PathName, BOOL& bIsTextUnicode)
{
	bIsTextUnicode = FALSE;
	HANDLE hFile = CreateFile(PathName, GENERIC_WRITE | GENERIC_READ, 0, NULL, OPEN_EXISTING,
		FILE_ATTRIBUTE_NORMAL, NULL);
	if (hFile == INVALID_HANDLE_VALUE)
	{
		AfxMessageBox(_T("File could not be opened."));
		return FALSE;
	}
	DWORD dwFileSize = GetFileSize(hFile, NULL);
	HANDLE hFileMap = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0,
		dwFileSize + sizeof(WCHAR), NULL);
	if (hFileMap == nullptr)
	{
		AfxMessageBox(_T("File map could not be opened."));
		CloseHandle(hFile);
		return FALSE;
	}
	PVOID pvFile = MapViewOfFile(hFileMap, FILE_MAP_WRITE, 0, 0, 0);
	if (pvFile == NULL)
	{
		AfxMessageBox(_T("Could not map view of file."));
		CloseHandle(hFileMap);
		CloseHandle(hFile);
		return FALSE;
	}
	int iUnicodeTestFlags = -1;
	bIsTextUnicode = IsTextUnicode(pvFile, dwFileSize, &iUnicodeTestFlags);
	if (!bIsTextUnicode)
	{
		PSTR pchANSI = (PSTR)pvFile;
		pchANSI[dwFileSize / sizeof(CHAR)] = 0;
		_strrev(pchANSI);
		pchANSI = strstr(pchANSI, "\n\r");

		while (pchANSI != NULL)
		{
			*pchANSI++ = '\r';
			*pchANSI++ = '\n';
			pchANSI = strstr(pchANSI, "\n\r");
		}
	}
	else
	{
		PWSTR pchUnicode = (PWSTR)pvFile;
		pchUnicode[dwFileSize / sizeof(WCHAR)] = 0;
		if ((iUnicodeTestFlags & IS_TEXT_UNICODE_SIGNATURE) != 0)
		{
			pchUnicode++;
		}
		_wcsrev(pchUnicode);
		pchUnicode = wcsstr(pchUnicode, _T("\n\r"));
		while (pchUnicode != nullptr)
		{
			*pchUnicode++ = _T('\r');
			*pchUnicode++ = _T('\n');
			pchUnicode = wcsstr(pchUnicode, _T("\n\r"));
		}
	}
	UnmapViewOfFile(pvFile);
	CloseHandle(hFileMap);
	SetFilePointer(hFile, dwFileSize, NULL, FILE_BEGIN);
	SetEndOfFile(hFile);
	CloseHandle(hFile);
	return TRUE;
	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值