using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Text;
using System.Threading.Tasks;
namespace CountFilesWithReparseData
{
class Program
{
public static string windowsSourceFolderPath;
public static bool windowsIgnoreHiddenFiles = false;
public static ConsoleColor originalForegroundColor;
public static Dictionary<string, Dictionary<string, bool>> localFilesMetaInfo = new Dictionary<string, Dictionary<string, bool>>();
public static int totalSourceFolderFolderCount = 0;
public static int totalSourceFileCount = 0;
public static int ReparseData_Directories = 0;
public static int ReparseData_Files = 0;
public static int ProgressLogTimeDelayFileCount = 0;
public static int PathTooLongItems = 0;
static void Main(string[] args)
{
string rootFolderpath = string.Empty;
originalForegroundColor = Console.ForegroundColor;
Console.SetWindowSize(Console.WindowWidth * 2, Console.WindowHeight * 2);
Console.WriteLine();
Console.WriteLine("Please enter the windows path where you want to count the files with ReparseData:");
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine();
Console.Write("Example 1: ");
Console.ForegroundColor = originalForegroundColor;
Console.WriteLine("C:/MigrationData/BigFolder/");
Console.ForegroundColor = ConsoleColor.Green;
Console.Write("Example 2: ");
Console.ForegroundColor = originalForegroundColor;
Console.WriteLine(@"\\Kakinada\Jagannaikpur\");
Console.WriteLine();
Console.Write("Enter here >> ");
windowsSourceFolderPath = Console.ReadLine();
Console.WriteLine("Path entered = "+ windowsSourceFolderPath);
// Print START time
Console.WriteLine();
Console.Write("Counting started at ");
Console.ForegroundColor = ConsoleColor.Cyan;
Console.Write(DateTime.Now);
Console.ForegroundColor = originalForegroundColor;
// Process the path
CountFilesWithReparseData();
// Print END time
Console.WriteLine();
Console.WriteLine();
Console.Write("Counting ended at ");
Console.ForegroundColor = ConsoleColor.Cyan;
Console.WriteLine(DateTime.Now);
Console.ForegroundColor = originalForegroundColor;
Console.WriteLine();
Console.WriteLine();
Console.WriteLine();
Console.WriteLine("=============");
Console.WriteLine("R E S U L T");
Console.WriteLine("=============");
Console.WriteLine();
Console.WriteLine("Total Folder count = "+ totalSourceFolderFolderCount);
Console.WriteLine("Total File count = " + totalSourceFileCount);
if (PathTooLongItems > 0)
{
Console.WriteLine("Skipped " + PathTooLongItems + " items and subitems because of PathTooLong >256 characters exception");
}
Console.WriteLine();
Console.WriteLine("Total Folder count (with ReparseData) = "+ ReparseData_Directories);
Console.WriteLine("Total Folder count (with ReparseData) = "+ ReparseData_Files);
Console.WriteLine();
// Don't close the console window.
Console.ReadKey();
}
public static void WalkDirectoryTree(System.IO.DirectoryInfo dir)
{
List<DirectoryInfo> dirs = null;
try
{
dirs = dir.GetDirectories().ToList();
}
catch (Exception ex)
{
Console.WriteLine(" ");
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(ex.Message + " Skipping this folder.");
Console.ForegroundColor = originalForegroundColor;
Console.WriteLine(" ");
return;
}
if (dirs != null)
{
var filtered = !(windowsIgnoreHiddenFiles) ? dirs : dirs.Where(f => !f.Attributes.HasFlag(FileAttributes.Hidden));
foreach (DirectoryInfo subDir in filtered)
{
string path = string.Empty;
try
{
path = subDir.FullName;
}
catch (PathTooLongException)
{
PathTooLongItems++;
}
if (!localFilesMetaInfo.ContainsKey(path))
{
++totalSourceFolderFolderCount;
if ((ProgressLogTimeDelayFileCount++)%100 == 0)
{
string currentTimeStamp = string.Format("[{0:dd-MMM/HH:mm:ss}] ", DateTime.Now);
Console.Write("\r" + currentTimeStamp + " Indexing " + (totalSourceFolderFolderCount) + " Local folders.");
}
if (HasReparseData(path))
{
ReparseData_Directories++;
}
localFilesMetaInfo.Add(path, new Dictionary<string, bool>());
}
WalkDirectoryTree(subDir);
}
}
}
public static bool HasReparseData(string path)
{
if (String.IsNullOrEmpty(path))
return false;
FileInfo pathInfo = new FileInfo(path);
return pathInfo.Attributes.HasFlag(FileAttributes.ReparsePoint);
}
public static void CountFilesWithReparseData()
{
Console.WriteLine(" ");
// Index folders first
localFilesMetaInfo.Add(windowsSourceFolderPath, new Dictionary<string, bool>());
Console.WriteLine();
WalkDirectoryTree(new DirectoryInfo(windowsSourceFolderPath));
Console.WriteLine();
foreach (KeyValuePair<string, Dictionary<string, bool>> uniqueLocalFolder in localFilesMetaInfo)
{
DirectoryInfo DirInfo = new DirectoryInfo(uniqueLocalFolder.Key);
FileInfo[] sfilesList;
try
{
sfilesList = DirInfo.GetFiles();
}
catch (Exception ex)
{
Console.WriteLine(" ");
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(ex.Message + " Skipping this file.");
Console.ForegroundColor = originalForegroundColor;
Console.WriteLine(" ");
continue;
}
sfilesList = (windowsIgnoreHiddenFiles) ? sfilesList.Where(f => !f.Attributes.HasFlag(FileAttributes.Hidden)).ToArray() : sfilesList;
int sourceFolder_fCount = sfilesList.Length;
foreach (var fileInfo in sfilesList)
{
++totalSourceFileCount;
if ((ProgressLogTimeDelayFileCount++) % 100 == 0)
{
string currentTimeStamp = string.Format("[{0:dd-MMM/HH:mm:ss}] ", DateTime.Now);
Console.Write("\r" + currentTimeStamp + " Indexing " + (totalSourceFileCount) + " Local files.");
}
string path = string.Empty;
try
{
path = fileInfo.FullName;
}
catch (PathTooLongException ex)
{
PathTooLongItems++;
}
if (HasReparseData(path))
{
ReparseData_Files++;
}
}
}
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Text;
using System.Threading.Tasks;
namespace CountFilesWithReparseData
{
class Program
{
public static string windowsSourceFolderPath;
public static bool windowsIgnoreHiddenFiles = false;
public static ConsoleColor originalForegroundColor;
public static Dictionary<string, Dictionary<string, bool>> localFilesMetaInfo = new Dictionary<string, Dictionary<string, bool>>();
public static int totalSourceFolderFolderCount = 0;
public static int totalSourceFileCount = 0;
public static int ReparseData_Directories = 0;
public static int ReparseData_Files = 0;
public static int ProgressLogTimeDelayFileCount = 0;
public static int PathTooLongItems = 0;
static void Main(string[] args)
{
string rootFolderpath = string.Empty;
originalForegroundColor = Console.ForegroundColor;
Console.SetWindowSize(Console.WindowWidth * 2, Console.WindowHeight * 2);
Console.WriteLine();
Console.WriteLine("Please enter the windows path where you want to count the files with ReparseData:");
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine();
Console.Write("Example 1: ");
Console.ForegroundColor = originalForegroundColor;
Console.WriteLine("C:/MigrationData/BigFolder/");
Console.ForegroundColor = ConsoleColor.Green;
Console.Write("Example 2: ");
Console.ForegroundColor = originalForegroundColor;
Console.WriteLine(@"\\Kakinada\Jagannaikpur\");
Console.WriteLine();
Console.Write("Enter here >> ");
windowsSourceFolderPath = Console.ReadLine();
Console.WriteLine("Path entered = "+ windowsSourceFolderPath);
// Print START time
Console.WriteLine();
Console.Write("Counting started at ");
Console.ForegroundColor = ConsoleColor.Cyan;
Console.Write(DateTime.Now);
Console.ForegroundColor = originalForegroundColor;
// Process the path
CountFilesWithReparseData();
// Print END time
Console.WriteLine();
Console.WriteLine();
Console.Write("Counting ended at ");
Console.ForegroundColor = ConsoleColor.Cyan;
Console.WriteLine(DateTime.Now);
Console.ForegroundColor = originalForegroundColor;
Console.WriteLine();
Console.WriteLine();
Console.WriteLine();
Console.WriteLine("=============");
Console.WriteLine("R E S U L T");
Console.WriteLine("=============");
Console.WriteLine();
Console.WriteLine("Total Folder count = "+ totalSourceFolderFolderCount);
Console.WriteLine("Total File count = " + totalSourceFileCount);
if (PathTooLongItems > 0)
{
Console.WriteLine("Skipped " + PathTooLongItems + " items and subitems because of PathTooLong >256 characters exception");
}
Console.WriteLine();
Console.WriteLine("Total Folder count (with ReparseData) = "+ ReparseData_Directories);
Console.WriteLine("Total Folder count (with ReparseData) = "+ ReparseData_Files);
Console.WriteLine();
// Don't close the console window.
Console.ReadKey();
}
public static void WalkDirectoryTree(System.IO.DirectoryInfo dir)
{
List<DirectoryInfo> dirs = null;
try
{
dirs = dir.GetDirectories().ToList();
}
catch (Exception ex)
{
Console.WriteLine(" ");
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(ex.Message + " Skipping this folder.");
Console.ForegroundColor = originalForegroundColor;
Console.WriteLine(" ");
return;
}
if (dirs != null)
{
var filtered = !(windowsIgnoreHiddenFiles) ? dirs : dirs.Where(f => !f.Attributes.HasFlag(FileAttributes.Hidden));
foreach (DirectoryInfo subDir in filtered)
{
string path = string.Empty;
try
{
path = subDir.FullName;
}
catch (PathTooLongException)
{
PathTooLongItems++;
}
if (!localFilesMetaInfo.ContainsKey(path))
{
++totalSourceFolderFolderCount;
if ((ProgressLogTimeDelayFileCount++)%100 == 0)
{
string currentTimeStamp = string.Format("[{0:dd-MMM/HH:mm:ss}] ", DateTime.Now);
Console.Write("\r" + currentTimeStamp + " Indexing " + (totalSourceFolderFolderCount) + " Local folders.");
}
if (HasReparseData(path))
{
ReparseData_Directories++;
}
localFilesMetaInfo.Add(path, new Dictionary<string, bool>());
}
WalkDirectoryTree(subDir);
}
}
}
public static bool HasReparseData(string path)
{
if (String.IsNullOrEmpty(path))
return false;
FileInfo pathInfo = new FileInfo(path);
return pathInfo.Attributes.HasFlag(FileAttributes.ReparsePoint);
}
public static void CountFilesWithReparseData()
{
Console.WriteLine(" ");
// Index folders first
localFilesMetaInfo.Add(windowsSourceFolderPath, new Dictionary<string, bool>());
Console.WriteLine();
WalkDirectoryTree(new DirectoryInfo(windowsSourceFolderPath));
Console.WriteLine();
foreach (KeyValuePair<string, Dictionary<string, bool>> uniqueLocalFolder in localFilesMetaInfo)
{
DirectoryInfo DirInfo = new DirectoryInfo(uniqueLocalFolder.Key);
FileInfo[] sfilesList;
try
{
sfilesList = DirInfo.GetFiles();
}
catch (Exception ex)
{
Console.WriteLine(" ");
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(ex.Message + " Skipping this file.");
Console.ForegroundColor = originalForegroundColor;
Console.WriteLine(" ");
continue;
}
sfilesList = (windowsIgnoreHiddenFiles) ? sfilesList.Where(f => !f.Attributes.HasFlag(FileAttributes.Hidden)).ToArray() : sfilesList;
int sourceFolder_fCount = sfilesList.Length;
foreach (var fileInfo in sfilesList)
{
++totalSourceFileCount;
if ((ProgressLogTimeDelayFileCount++) % 100 == 0)
{
string currentTimeStamp = string.Format("[{0:dd-MMM/HH:mm:ss}] ", DateTime.Now);
Console.Write("\r" + currentTimeStamp + " Indexing " + (totalSourceFileCount) + " Local files.");
}
string path = string.Empty;
try
{
path = fileInfo.FullName;
}
catch (PathTooLongException ex)
{
PathTooLongItems++;
}
if (HasReparseData(path))
{
ReparseData_Files++;
}
}
}
}
}
}
No comments:
Post a Comment