在windows上用c++获取系统应用程序的文件大小

Geting the file size of a system application on windows in C++

本文关键字:应用程序 文件大小 系统 获取 windows 上用 c++      更新时间:2023-10-16

我正在尝试获取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(); 
}