[英]Using handle in winapi c, return with 0 and no errors but it's not printing any file
#include <Windows.h>
#include <stdio.h>
#include <string.h>
int main() {
WIN32_FIND_DATAW ffd;
HANDLE hDire = FindFirstFileW(L"C:\\uripersonal\\School\\summerAndroid\\Ex1", &ffd);
if (hDire == INVALID_HANDLE_VALUE) {
printf("FindFirstFile failed (%d)\n", GetLastError());
return 2;
}
while (FindNextFileW(hDire, &ffd) != 0) {
printf("File Name: %ls" ,ffd.cFileName);
printf("File Size: %dw" ,ffd.nFileSizeHigh);
}
CloseHandle(hDire);
return 0;
}
除非它失敗(不是),while 應該打印每個文件名 + 大小。 它以退出代碼 0 返回,但沒有打印,路徑有效。
您總是會錯過第一個文件,因為您只是直接調用FindNextFileW
而不打印FindFirstFile
找到的內容。 如果您想要所有這些,您還應該添加一個通配符。
例子:
#include <Windows.h>
#include <stdio.h>
#include <string.h>
int main() {
WIN32_FIND_DATAW ffd;
HANDLE hDire = // note `\\*` added below:
FindFirstFileW(L"C:\\uripersonal\\School\\summerAndroid\\Ex1\\*", &ffd);
if (hDire == INVALID_HANDLE_VALUE) {
printf("FindFirstFile failed (%d)\n", GetLastError());
return 2;
}
// use a do-while loop instead of a while-loop:
do {
printf("File Name: %ls\t" ,ffd.cFileName);
printf("File Size: %dw\n" ,ffd.nFileSizeHigh);
} while (FindNextFileW(hDire, &ffd) != 0);
CloseHandle(hDire);
}
請注意,您只打印文件大小的大部分。 你需要兩者來獲得真正的大小:
DWORD nFileSizeHigh;
DWORD nFileSizeLow;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.