1

好的,所以我正在尝试编写一些可以扫描文件夹并使用 Zone.Identifier 标签识别文件并删除标签(希望如此)的东西。我一直在寻找方法来做到这一点,我正在尝试几种不同的方法。

我有一个使用BackupRead()etc 的函数,但是我对这种事情有点新手,虽然我已经设法用这种方法找到了流,但我希望用它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 的新手,所以如果我使用不正确,犯了某种令人尴尬的愚蠢错误,或者你认为我在叫错树,那么请告诉我.

4

2 回答 2

1

第二个参数指定第三个参数的类型。在这种情况下,唯一的信息级别是 FindStreamInfoStandard,它指定数据参数应该是 WIN32_FIND_STREAM_DATA。

于 2012-11-15T15:09:45.893 回答
1

FindFirstStreamW不会为您分配缓冲区。您必须自己分配缓冲区并将指针传递给它:

WIN32_FIND_STREAM_DATA findStreamData;

hFindStream = FindFirstStreamW (lpFileName,
                                InfoLevel,
                                &findStreamData,
                                dwFlags );
于 2012-11-15T19:37:20.583 回答