Подсчет цифр в файле с использованием функций WinApi

Мне нужно посчитать цифры в файле, используя CreateFile а также ReadFile методы из <Windows.h>,

Вот что у меня есть:

int CountDigitsInFile(PCTSTR path)
{
HANDLE hFile = CreateFile(path, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

if (hFile == INVALID_HANDLE_VALUE)
{
_tprintf_s(TEXT("Open File Error"));
return NULL;
}

TCHAR data[100];
DWORD dwRead;
DWORD dwFileSize = GetFileSize(hFile, NULL);

BOOL bResultRead = ReadFile(hFile, &data, dwFileSize, &dwRead, NULL);

if (!bResultRead || dwRead != dwFileSize)
{
_tprintf_s(TEXT("Read file Error"));
return NULL;
}

_tprintf_s(data); // prints the file content correctly

int count = 0;
wstring str(data);
std::cout << str.size() << std::endl; // prints 105 when file content is       the following: Hello, World!5
for (int i = 0; i < str.size(); ++i) // fails somewhere here
if (isdigit(str[i]))
count++;
CloseHandle(hFile);
return count;
}

Возможно, я считаю их неверно, и мне нужно посчитать побайтово или что-то еще? И я думаю, что я действительно не должен использовать wstring здесь и лучше считать цифры только при чтении из файла.

Не могли бы вы помочь мне с этим?

ОБНОВИТЬ

Вот что я получаю при запуске программы:
введите описание изображения здесь

0

Решение

Вам не нужен дополнительный уровень сложности создания std :: string, вы уже получили его в виде массива char и можете использовать dwRead, который является нет. прочитанных байтов ReadFile ().

for (int i = 0; i < dwRead; ++i)
if (iswdigit(data[i]))
count++;
1

Другие решения

Прочитайте следующую заметку от https://msdn.microsoft.com/en-us/library/wt3s3k55.aspx

Размер wchar_t определяется реализацией. Если ваш код зависит от wchar_t определенного размера, проверьте реализацию вашей платформы (например, с помощью sizeof (wchar_t)). Если вам нужен строковый символьный тип с шириной, которая гарантированно останется неизменной на всех платформах, используйте string, u16string или u32string.

Если вы уверены, что ваш файл не содержит Unicode или многобайтовых символов, то лучше проанализировать char по char

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector