2012-11-15 24 views
0

好吧,我正在嘗試編寫一些可以掃描文件夾並使用Zone.Identifier標記識別文件並刪除標記(希望)的內容。 我一直在尋找方法來做到這一點,我嘗試了幾種不同的方法。使用FindFirstStreamW查找具有Zone.Identifier的文件

我有一個使用BackupRead()等的功能,但是我對這類東西有點新手,雖然我設法用這種方法找到了流,但我希望使用FindFirstStreamW()來讓生活更輕鬆,或者至少在一般情況下了解更多。

下面是我第一次使用這樣的嘗試:

int 
StreamsFunctionAlt (
    LPCTSTR  lpFileName) 
{ 
    LPVOID    lpFindStreamData; 
    HANDLE    hFindStream; 
    STREAM_INFO_LEVELS InfoLevel; 
    DWORD    dwFlags; 
    HANDLE    hFile; 

    if (!FileExists (lpFileName)) 
    { 
     return 1; 
    } 

    lpFindStreamData = NULL; 
    InfoLevel = 0; 
    dwFlags = 0; 

    hFindStream = FindFirstStreamW (lpFileName, 
            InfoLevel, 
            lpFindStreamData, 
            dwFlags); 
    if (!hFindStream == INVALID_HANDLE_VALUE) 
    { 
     FindNextStreamW (hFindStream, 
         lpFindStreamData); 
    } 

    FindClose (hFindStream); 
    return 0; 
} 

我所看到的是lpFindStreamData設置爲NULL,並保持NULLFindFirstStreamW()回報0xffffffff我認爲我很安全的假設是不我想要的是。 lpFileName是正確的文件名,並且是具有備用流的文件的路徑。

如前所述,我是一名新手,剛剛接觸C和新的Windows API,所以如果我錯誤地使用了這些,會造成某種令人尷尬的錯誤,或者你認爲我在吠叫錯誤的樹,請告訴我。

回答

1

第二個參數指定第三個參數的類型。在這種情況下,唯一的信息級別是FindStreamInfoStandard,它指定數據參數應該是WIN32_FIND_STREAM_DATA。

1

FindFirstStreamW不會爲您分配緩衝區。您必須自己分配緩衝區並將指針傳遞給它:

WIN32_FIND_STREAM_DATA findStreamData; 

hFindStream = FindFirstStreamW (lpFileName, 
           InfoLevel, 
           &findStreamData, 
           dwFlags); 
+0

感謝您的:) – Adwo

相關問題