- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我在创建命名共享内存和检查其大小时遇到问题。当我在这样的函数中调用它时,函数 GetFileSizeEx 失败。关于如何调试这个的任何想法?
void test_getsize(const char* lpName, int size){
HANDLE handle = CreateFileMapping(
INVALID_HANDLE_VALUE, // use paging file
NULL, // default security
PAGE_READWRITE, // read/write access
0, // maximum object size (high-order DWORD)
size, // maximum object size (low-order DWORD)
lpName); // name of mapping object
if (handle== NULL || handle== INVALID_HANDLE_VALUE){
last_error = get_error_from_errorno();
*error_return =1;
}
LARGE_INTEGER new_size;
err = GetFileSizeEx(handle, &new_size);
if (err==0){ printf("err ");} else {printf("pass ");}
printf("size=%lu\n", (unsigned long)new_size.QuadPart);
}
最佳答案
传递给 GetFileSizeEx
的句柄必须是文件句柄。您将它传递给文件映射 的句柄,这是完全不同的事情,因此它不会起作用。
显然您需要文件映射的大小(称为节对象),而且我认为 Win32 API 不提供此功能,因此您需要使用名为NtQuerySection
.这是它可能如何工作的想法(我还没有尝试过):
typedef enum _SECTION_INFORMATION_CLASS
{
SectionBasicInformation,
SectionImageInformation
} SECTION_INFORMATION_CLASS;
typedef struct _SECTION_BASIC_INFORMATION {
PVOID Base;
ULONG Attributes;
LARGE_INTEGER Size;
} SECTION_BASIC_INFORMATION;
typedef DWORD (WINAPI* NTQUERYSECTION)
(HANDLE, SECTION_INFORMATION_CLASS, PVOID, ULONG, PULONG);
NTQUERYSECTION NtQuerySection =
(NTQUERYSECTION)GetProcAddress(LoadLibrary("ntdll.dll"), "NtQuerySection");
SECTION_BASIC_INFORMATION SectionInfo = { 0 };
NTSTATUS = NtQuerySection(handle, SectionBasicInformation, &SectionInfo,
sizeof(SectionInfo), 0);
关于c - GetFileSizeEx 文件映射失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7602820/
目前,我正在使用 GetFileSizeEx 来跟踪日志文件在写入之前的大小。我们的空间有限,如果我们尝试创建大于 100 兆字节的文件,我们将停止记录数据。问题是出于某种原因,GetFileSize
我在创建命名共享内存和检查其大小时遇到问题。当我在这样的函数中调用它时,函数 GetFileSizeEx 失败。关于如何调试这个的任何想法? void test_getsize(const cha
我遇到了一个关于 GetFileSize 和 GetFileSizeEx API 的非常奇怪的问题。 除了来自 System32 目录的文件外,这两个函数都适用于每个输入文件。 例如: 如果我在 ca
我不知道如何使用 RTL 之外的任何 API。我一直在使用 SetFilePointer 和 GetFileSize 将物理磁盘读入缓冲区并将其转储到文件中,这样的循环可以完成 2GB 以下闪存卡的工
当我在只读文件上使用我的 Delphi 6 应用程序中的 Windows API 调用 GetFileSizeEx() 时,我收到操作系统错误代码 6(“无效文件句柄”)。如果我从文件中删除只读属性,
我是一名优秀的程序员,十分优秀!