public void AlternateDatastreamDirectory() { Random rand = new Random(); byte[][] data = new byte[10][]; for (int i = 0; i < 10; i++) { data[i] = new byte[1024 * 1024]; rand.NextBytes(data[i]); } using (TempDir tmpDir = new TempDir()) { // Make file for (int i = 0; i < 10; i++) { using (SafeFileHandle fileHandle = Win32.CreateFile(tmpDir.Directory.FullName + ":alternate" + i + ":$DATA")) using (FileStream fs = new FileStream(fileHandle, FileAccess.ReadWrite)) { fs.Write(data[i], 0, data[i].Length); } } // Discover dir in NTFSLib char driveLetter = tmpDir.Directory.FullName[0]; RawDisk disk = new RawDisk(driveLetter); NTFSDiskProvider provider = new NTFSDiskProvider(disk); NTFSWrapper ntfsWrapper = new NTFSWrapper(provider, 0); NtfsDirectory ntfsDir = NTFSHelpers.OpenDir(ntfsWrapper, tmpDir.Directory.FullName); // Check streams string[] streams = ntfsWrapper.ListDatastreams(ntfsDir.MFTRecord); Assert.AreEqual(10, streams.Length); for (int i = 0; i < 10; i++) { Assert.AreEqual(1, streams.Count(s => s == "alternate" + i)); } // Check data for (int i = 0; i < 10; i++) { using (Stream memStream = new MemoryStream(data[i])) using (Stream fileStream = ntfsWrapper.OpenFileRecord(ntfsDir.MFTRecord, "alternate" + i)) { StreamUtils.CompareStreams(memStream, fileStream); } } } }