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; }
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); }