Получение размера файла системного приложения на Windows в C ++

0

Я пытаюсь получить размер файла системного приложения в окнах. Чтобы проверить это, я создал тестовое приложение, которое пытается получить размер файла smss.exe в C:\Windows\System32\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
    Я думаю, что smss.exe не в SysWOW64 .
  • 0
    отключение перенаправления с помощью Wow64DisableWow64FsRedirection () решило это! спасибо, если вы отправите полный ответ, я буду рад принять его.
Теги:

2 ответа

2
Лучший ответ

Поскольку ваше приложение 32-битное, система перенаправляет ваш путь, чтобы перейти на SysWOW64, а там нет smss.exe. Хотя вы обнаружили, что Wow64DisableWow64FsRedirection отключает это перенаправление, также подумайте, что использование 64-разрядной программы также поможет.

-2

Получение размера файла уже здесь отвечает (еще не может добавить комментарий к вашему вопросу, поэтому мне нужно написать его как ответ): Как я могу получить размер файла в 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(); 
}
  • 1
    Это все еще не сделает файл больше найденным. И это требует открытия файла.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню