通过内存映射文件来颠倒文本内容(暂没有处理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

相关文章
|
4月前
|
JSON 数据格式
UltraEdit 去除文本中的空行,按指定字符换行
UltraEdit 去除文本中的空行,按指定字符换行
75 0
UltraEdit 去除文本中的空行,按指定字符换行
|
7月前
|
Java
java读取txt文件,使用逗号,分号,空格,回车将文件内容分割成一个一个的词组,找出所有重复的词组
java读取txt文件,使用逗号,分号,空格,回车将文件内容分割成一个一个的词组,找出所有重复的词组
159 38
|
7月前
Qt 按行追加文本代码
Qt 按行追加文本代码
80 0
|
索引
uniapp一秒钟去除字符串的最后一个字符
如果在使用该字符串的过程中想要去掉它的最后一个字符,可以通过slice和substring来截取部分字符串,并返回一个新的字符串
214 0
|
C语言
【C 语言】文件操作 ( 配置文件读写 | 写出或更新配置文件 | 逐行遍历文件文本数据 | 获取文件中的文本行 | 查询文本行数据 | 追加文件数据 | 使用占位符方式拼接字符串 )
【C 语言】文件操作 ( 配置文件读写 | 写出或更新配置文件 | 逐行遍历文件文本数据 | 获取文件中的文本行 | 查询文本行数据 | 追加文件数据 | 使用占位符方式拼接字符串 )
262 0
一日一技:一次性把字符串用多个分隔符分割
一日一技:一次性把字符串用多个分隔符分割
157 0
|
机器学习/深度学习 移动开发 Unix
如何使用UE去除复制文本中的空格、换行符和TAB
如何使用UE去除复制文本中的空格、换行符和TAB
如何使用UE去除复制文本中的空格、换行符和TAB
编写一个程序,如果名为Exercise12_15.txt的文件不存在,则创建该文件。使用文本I/O将随机产生的100个整数写入文件,文件中的整数由空格分开。从文件中读回数据并以升序显示数据。
编写一个程序,如果名为Exercise12_15.txt的文件不存在,则创建该文件。使用文本I/O将随机产生的100个整数写入文件,文件中的整数由空格分开。从文件中读回数据并以升序显示数据。
291 0
去掉多余的空格---输入一个字符串,字符串中可能包含多个连续的空格,请将多余的空格去掉,只留下一个空格。输入格式
输入一个字符串,字符串中可能包含多个连续的空格,请将多余的空格去掉,只留下一个空格。 输入格式 共一行,包含一个字符串。 输出格式 输出去掉多余空格后的字符串,占一行。 数据范围 输入字符串的长度不超过 200200。 保证输入字符串的开头和结尾没有空格。
327 0