通过内存映射文件来颠倒文本内容(暂没有处理Unicode和换行符)-阿里云开发者社区

开发者社区> 数据库> 正文

通过内存映射文件来颠倒文本内容(暂没有处理Unicode和换行符)

简介: // ReverseFileDemo.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include #include using namespace std; int _tmain(int argc, _T...
// ReverseFileDemo.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <windows.h>
#include <tchar.h>
#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    if(!(argc >= 1))
    {
        cout<<"参数过少"<<endl;
        system("pause");
        return -1;
    }

    TCHAR szSrcFilePath[MAX_PATH]  = {0};
    _tcscpy_s(szSrcFilePath,argv[1]);
    wcout<<L"src file :"<<szSrcFilePath<<endl;

    HANDLE hFile = ::CreateFile(szSrcFilePath,
        GENERIC_READ | GENERIC_WRITE,
        FILE_SHARE_READ,
        NULL,
        OPEN_EXISTING,
        FILE_ATTRIBUTE_NORMAL,
        NULL);
    if(hFile == INVALID_HANDLE_VALUE )
    {
        _tprintf_s(L"CreateFile error %d",::GetLastError());
        system("pause");
        return -1;
    }
    DWORD dwFileSize = ::GetFileSize(hFile,NULL);
    HANDLE hFileMap = ::CreateFileMapping(hFile,
        NULL,
        PAGE_READWRITE,
        0,
        dwFileSize + sizeof(WCHAR),
        NULL);
    if(hFileMap == NULL)
    {
        _tprintf_s(L"CreateFile error %d",::GetLastError());
        system("pause");
        return -1;
    }


    PVOID pvFile = MapViewOfFile(hFileMap,FILE_MAP_WRITE,0,0,0);
    int iUnicodeTestFlags = -1;
    BOOL bIsUnicode = ::IsTextUnicode(pvFile,dwFileSize,&iUnicodeTestFlags);
    if(!bIsUnicode)
    {
        PSTR pchAnsi = (PSTR) pvFile;
        pchAnsi[dwFileSize/(sizeof(CHAR))] = 0;
        _strrev(pchAnsi);
    }

    UnmapViewOfFile(pvFile);
    CloseHandle(hFileMap);
    SetFilePointer(hFile,dwFileSize,NULL,FILE_BEGIN);
    SetEndOfFile(hFile);
    CloseHandle(hFile);

    system("pause");
    return 0;
}

程序运行前文件内容为:1234567890

程序运行后文件内容为:0987654321

版权声明:本文首发在云栖社区,遵循云栖社区版权声明:本文内容由互联网用户自发贡献,版权归用户作者所有,云栖社区不为本文内容承担相关法律责任。云栖社区已升级为阿里云开发者社区。如果您发现本文中有涉嫌抄袭的内容,欢迎发送邮件至:developer2020@service.aliyun.com 进行举报,并提供相关证据,一经查实,阿里云开发者社区将协助删除涉嫌侵权内容。

分享:
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

其他文章