在C ++中获取Windows上的系统应用程序的文件大小

时间:2014-06-21 18:12:39

标签: c++ windows

我试图在Windows上获取系统应用程序的文件大小。为了测试这个,我创建了一个测试应用程序,它试图在C:\ Windows \ System32 \ smss.exe中获取smss.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"));
}

2 个答案:

答案 0 :(得分:2)

由于您的应用程序是32位,系统redirects是您转到SysWOW64的路径,而没有smss.exe。虽然您已发现Wow64DisableWow64FsRedirection禁用此重定向,但也要考虑使用64位程序也可以解决这个问题。

答案 1 :(得分:-1)

此处已经解答了获取文件大小的问题(无法在您的问题中添加评论,因此我需要将其作为答案编写): How can I get a file's size in C++?

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(); 
}