private static void BuildCRCStream(string directory, InputParams inputParams, ref MemoryStream memoryStream)
{
DirectoryInfo directoryInfo = new DirectoryInfo(directory);
SyncResults results = new SyncResults();
// get filtered list of files in this directory
FileInfo[] files = new Sync().GetFiles(directoryInfo, inputParams, ref results);
// sort by name for deterministic order
Array.Sort(files, new FileInfoComparer());
// write information about each file to stream
foreach (FileInfo fileInfo in files)
{
byte[] bytes = ASCIIEncoding.UTF8.GetBytes(fileInfo.Name);
memoryStream.Write(bytes, 0, bytes.Length);
bytes = BitConverter.GetBytes(fileInfo.Length);
memoryStream.Write(bytes, 0, bytes.Length);
bytes = BitConverter.GetBytes(fileInfo.LastWriteTime.ToBinary());
memoryStream.Write(bytes, 0, bytes.Length);
bytes = ASCIIEncoding.UTF8.GetBytes(fileInfo.Attributes.ToString());
memoryStream.Write(bytes, 0, bytes.Length);
}
// get filtered list of subdirectories
DirectoryInfo[] subdirs = new Sync().GetDirectories(directoryInfo, inputParams, ref results);
// sort by name for deterministic order
Array.Sort(subdirs, new DirectoryInfoComparer());
foreach (DirectoryInfo subdir in subdirs)
{
// write information about each subdirectory to stream
byte[] bytes = ASCIIEncoding.UTF8.GetBytes(subdir.Name);
memoryStream.Write(bytes, 0, bytes.Length);
// recurse
BuildCRCStream(Path.Combine(directory, subdir.Name), inputParams, ref memoryStream);
}
}