在windows上用c++获取系统应用程序的文件大小
Geting the file size of a system application on windows in C++
我正在尝试获取windows系统应用程序的文件大小。为了测试这一点,我创建了一个测试应用程序,试图在c: windows system32 sms .exe中获取sms .exe的文件大小,但它失败了,错误:ERROR_FILE_NOT_FOUND。这个文件确实存在(我已经检查过了)。我还尝试了不同的方法来获取文件大小,使用:FindFirstFile, CreateFile和GetFileSizeEx。但都返回相同的错误。我还想看一下文件内容。
我做错了什么?
代码:
// Test.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#include <iostream>
__int64 getFileSize(LPWSTR filePath)
{
WIN32_FILE_ATTRIBUTE_DATA fad;
if (!GetFileAttributesEx(filePath, GetFileExInfoStandard, &fad))
{
_tprintf(TEXT("n CAnt get file size for file %s error %d"), filePath, GetLastError());
return 0;
}
LARGE_INTEGER size;
size.HighPart = fad.nFileSizeHigh;
size.LowPart = fad.nFileSizeLow;
return size.QuadPart;
}
int _tmain(int argc, _TCHAR* argv[])
{
_tprintf(TEXT("File size %d "), getFileSize(L"C:\Windows\System32\smss.exe"));
}
由于您的应用程序是32位的,因此系统将您的路径重定向到SysWOW64,其中没有smss.exe
。虽然您已经发现Wow64DisableWow64FsRedirection
禁用了此重定向,但也要考虑使用64位程序也可以达到此目的。
获取文件的大小已经在这里回答了(还不能给你的问题添加评论,所以我需要把它写为答案):如何在c++中获得文件's大小?
std::ifstream::pos_type filesize(const char* filename)
{
std::ifstream in(filename, std::ifstream::in | std::ifstream::binary);
in.seekg(0, std::ifstream::end);
return in.tellg();
}
相关文章:
- 使用VerQueryValue检索应用程序的文件描述
- 在安卓应用程序中使用.exe文件
- 为什么从文件获取图标时应用程序有时会崩溃?
- make 命令创建 .file,但不创建应用程序文件
- 如何在Windows窗体应用程序中打开txt文件并将行导入文本框
- 在不打开应用程序的情况下在MinGW c++中播放声音(.wav)文件
- MacOS应用程序文件关联
- Windows 8 应用商店应用程序C++文件访问
- Visual Studio使用多线程DLL发布应用程序文件
- 如何缩小 WTL 应用程序的大小
- 在应用程序文件夹中安装 C/C++ 库"IGRAPH"
- Qt单一应用程序文件已打开
- 应用程序文件没有在不同的mac上运行
- visualstudio2015在调试期间挂起默认控制台应用程序文件
- Windows 7 x64操作系统下如何确定应用程序文件路径
- 在windows上用c++获取系统应用程序的文件大小
- 如何在 Visual Studio 2010 中创建代码的"应用程序文件"
- visual studio 2010 - mfcc++参考INI文件在部署后的应用程序文件夹
- android/opencv-从NDK中的应用程序文件夹加载级联文件
- 更改应用程序文件(. c文件)的名称