1

さて、私はフォルダをスキャンして、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()戻ってきます。は正しいファイル名であり、代替ストリームを持つファイルへのパスです。0xfffffffflpFileName

前述のように、私は新人で、CとWindows APIを初めて使用するため、これを誤って使用している場合、ある種の恥ずかしいほど愚かなエラーを犯した場合、または間違ったツリーを吠えていると思われる場合は、お知らせください。 。

4

2 に答える 2

1

FindFirstStreamWはバッファを割り当てません。自分でバッファを割り当て、ポインタを渡す必要があります。

WIN32_FIND_STREAM_DATA findStreamData;

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

2 番目のパラメーターは、3 番目のパラメーターの型を指定します。この場合、唯一の情報レベルは、データ パラメータが WIN32_FIND_STREAM_DATA であることを指定する FindStreamInfoStandard です。

于 2012-11-15T15:09:45.893 に答える