コード例 #1
0
 internal static List<AlternateStreamData> GetStreams(string path)
 {
     if (path == null)
     {
         throw new ArgumentNullException("path");
     }
     List<AlternateStreamData> list = new List<AlternateStreamData>();
     AlternateStreamNativeData lpFindStreamData = new AlternateStreamNativeData();
     SafeFindHandle hndFindFile = NativeMethods.FindFirstStreamW(path, NativeMethods.StreamInfoLevels.FindStreamInfoStandard, lpFindStreamData, 0);
     if (hndFindFile.IsInvalid)
     {
         throw new Win32Exception();
     }
     try
     {
         do
         {
             AlternateStreamData data2;
             lpFindStreamData.Name = lpFindStreamData.Name.Substring(1);
             string b = ":$DATA";
             if (!string.Equals(lpFindStreamData.Name, b, StringComparison.OrdinalIgnoreCase))
             {
                 lpFindStreamData.Name = lpFindStreamData.Name.Replace(b, "");
             }
             data2 = new AlternateStreamData {
                 Stream = lpFindStreamData.Name,
                 Length = lpFindStreamData.Length,
             };
             data2.FileName = path.Replace(data2.Stream, "");
             data2.FileName = data2.FileName.Trim(new char[] { ':' });
             list.Add(data2);
             lpFindStreamData = new AlternateStreamNativeData();
         }
         while (NativeMethods.FindNextStreamW(hndFindFile, lpFindStreamData));
         int error = Marshal.GetLastWin32Error();
         if (error != 0x26)
         {
             throw new Win32Exception(error);
         }
     }
     finally
     {
         hndFindFile.Dispose();
     }
     return list;
 }
コード例 #2
0
        internal static List <AlternateStreamData> GetStreams(string path)
        {
            if (path == null)
            {
                throw new ArgumentNullException("path");
            }
            List <AlternateStreamData> list             = new List <AlternateStreamData>();
            AlternateStreamNativeData  lpFindStreamData = new AlternateStreamNativeData();
            SafeFindHandle             hndFindFile      = NativeMethods.FindFirstStreamW(path, NativeMethods.StreamInfoLevels.FindStreamInfoStandard, lpFindStreamData, 0);

            if (hndFindFile.IsInvalid)
            {
                throw new Win32Exception();
            }
            try
            {
                do
                {
                    AlternateStreamData data2;
                    lpFindStreamData.Name = lpFindStreamData.Name.Substring(1);
                    string b = ":$DATA";
                    if (!string.Equals(lpFindStreamData.Name, b, StringComparison.OrdinalIgnoreCase))
                    {
                        lpFindStreamData.Name = lpFindStreamData.Name.Replace(b, "");
                    }
                    data2 = new AlternateStreamData {
                        Stream = lpFindStreamData.Name,
                        Length = lpFindStreamData.Length,
                    };
                    data2.FileName = path.Replace(data2.Stream, "");
                    data2.FileName = data2.FileName.Trim(new char[] { ':' });
                    list.Add(data2);
                    lpFindStreamData = new AlternateStreamNativeData();
                }while (NativeMethods.FindNextStreamW(hndFindFile, lpFindStreamData));
                int error = Marshal.GetLastWin32Error();
                if (error != 0x26)
                {
                    throw new Win32Exception(error);
                }
            }
            finally
            {
                hndFindFile.Dispose();
            }
            return(list);
        }