簡體   English   中英

在 winapi c 中使用句柄,返回 0 並且沒有錯誤,但它沒有打印任何文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM