开发者社区> 技术小阿哥> 正文

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

简介:
+关注继续查看
// 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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
DataXceiver error processing unknown operation src: /127.0.0.1:36479 dst: /127.0.0.1:50010处理
异常信息如下:  2015-12-09 17:39:20,310 ERROR datanode.DataNode (DataXceiver.java:run(278)) - hadoop07:50010:DataXceiver error processingunknown operation  src: /127.
1641 0
一个内存增长问题的分析和处理(二)——valgrind工具的用法
valgrind是linux下对C++和C程序进行内存泄露检测的工具,除了内存检测,valgrind还提供了很多其他的功能,这里主要介绍下valgrind的内存检测的功能。   首先是文件的下载,valgrind的官方网址是http://valgrind.org/,最新版本的valgrind是3.9,下载地址如下:http://valgrind.org/downloads/。
1089 0
Android官方开发文档Training系列课程中文版:连接无线设备之通过P2P搜索网络服务
原文地址:http://android.xsoftlab.net/training/connect-devices-wirelessly/nsd-wifi-direct.html 本阶段的第一节课 Using Network Service Discovery 展示了如何搜索本地网络服务。
889 0
linux 内存文件系统使用 - tmpfs, ramfs, shmfs
linux 内存文件系统使用 - tmpfs, ramfs, shmfs
1036 0
独家 | 关于NLP和机器学习之文本处理的你需要知道的一切(附学习资源)
本文将介绍自然语言处理和机器学习中常见的文本预处理方法。
1939 0
Android官方开发文档Training系列课程中文版:连接无线设备之通过WIFI创建P2P连接
原文地址:http://android.xsoftlab.net/training/connect-devices-wirelessly/wifi-direct.html#permissions Wi-Fi peer-to-peer (P2P) APIs可以使程序与附近的设备进行直接通讯,Android的Wi-Fi P2P框架由Wi-Fi Direct™提供技术支持。
786 0
13692
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载