C语言的CreateFile函数为何导致内存不能为written,深层原因究竟是什么?

2026-04-16 20:292阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计252个文字,预计阅读时间需要2分钟。

C语言的CreateFile函数为何导致内存不能为written,深层原因究竟是什么?

CLPCWSTR szFileName=argv[2];// 文件名可以根据需要修改,或使用变量输入HANDLE hFile=CreateFile(szFileName, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

C语言的CreateFile函数为何导致内存不能为written,深层原因究竟是什么?

LPCWSTR szFileName;
szFileName=argv[2];
//LPCWSTR szFileName=L"test.txt";//文件名字可以根据自己的需要修改,或者用变量输入
HANDLE hFile = CreateFile(szFileName, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
// 共享方式打开,避免其他地方需要读写此文件
if (INVALID_HANDLE_VALUE != hFile)
{
DWORD dwFileSize = GetFileSize(hFile, NULL);
PBYTE pBuffer = (PBYTE)malloc(dwFileSize + 2);
int iLen = 0;
if (!ReadFile(hFile, pBuffer, dwFileSize, &dwFileSize, NULL))
{
free(pBuffer);
return FALSE;
}
//CloseHandle(hFile);
pBuffer[dwFileSize] = ‘\0‘;
pBuffer[dwFileSize + 1] = ‘\0‘;
//std::wstring srcEncode;
srcEncode = DetectEncode(pBuffer, dwFileSize);
CloseHandle(hFile);
free(pBuffer);

HANDLE hFile = CreateFile(szFileName, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

这一句,文件读写方式要选择FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE模式,否则多次打开关闭就有可能导致内存不能为written错误,这个错误是通过运行exe程序的时候,调用调试命令找到的。

本文共计252个文字,预计阅读时间需要2分钟。

C语言的CreateFile函数为何导致内存不能为written,深层原因究竟是什么?

CLPCWSTR szFileName=argv[2];// 文件名可以根据需要修改,或使用变量输入HANDLE hFile=CreateFile(szFileName, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

C语言的CreateFile函数为何导致内存不能为written,深层原因究竟是什么?

LPCWSTR szFileName;
szFileName=argv[2];
//LPCWSTR szFileName=L"test.txt";//文件名字可以根据自己的需要修改,或者用变量输入
HANDLE hFile = CreateFile(szFileName, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
// 共享方式打开,避免其他地方需要读写此文件
if (INVALID_HANDLE_VALUE != hFile)
{
DWORD dwFileSize = GetFileSize(hFile, NULL);
PBYTE pBuffer = (PBYTE)malloc(dwFileSize + 2);
int iLen = 0;
if (!ReadFile(hFile, pBuffer, dwFileSize, &dwFileSize, NULL))
{
free(pBuffer);
return FALSE;
}
//CloseHandle(hFile);
pBuffer[dwFileSize] = ‘\0‘;
pBuffer[dwFileSize + 1] = ‘\0‘;
//std::wstring srcEncode;
srcEncode = DetectEncode(pBuffer, dwFileSize);
CloseHandle(hFile);
free(pBuffer);

HANDLE hFile = CreateFile(szFileName, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

这一句,文件读写方式要选择FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE模式,否则多次打开关闭就有可能导致内存不能为written错误,这个错误是通过运行exe程序的时候,调用调试命令找到的。