using Cyclic.Redundancy.Check;
using System.ComponentModel;
using System.Windows.Forms;
public partial class lForm : Form
private void browseButton_Click(object sender, EventArgs e)
private void saveButton_Click(object sender, EventArgs e)
private void removeButton_Click(object sender, EventArgs e)
RemoveFromPath(filePath.SelectedText);
private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
Files = GetFiles(e.Argument);
for (int i = 0; i < Files.Length; i++)
backgroundWorker.ReportProgress(i + 1, GetFileData(Files[i]));
private void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
UpdateResult(e.UserState);
UpdateProgressBar(ComputeProgress(e.ProgressPercentage));
private void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
private void DisableButtons()
saveButton.Enabled = false;
removeButton.Enabled = false;
browseButton.Enabled = false;
private void EnableButtons()
saveButton.Enabled = true;
removeButton.Enabled = true;
browseButton.Enabled = true;
public string[] GetFiles(object Path)
return Directory.GetFiles(Path.ToString(), "*.*", System.IO.SearchOption.AllDirectories);
public int GetFilesCount(string[] Files)
public string GetFileData(string File)
FileInfo fileInfo = new FileInfo(File);
return File + " " + GetHash(File) + " " + fileInfo.Length;
private string GetHash(string Name)
if (Name == string.Empty)
string Hash = string.Empty;
using (FileStream fileStream = File.Open(Name, FileMode.Open))
foreach (byte b in crc.ComputeHash(fileStream))
Hash += b.ToString("x2").ToLower();
MessageBox.Show("Can't open: " + Name);
private void UpdateResult(object Data)
Result.AppendText(Data.ToString().Replace(@"\", "/") + Environment.NewLine);
private int ComputeProgress(int Percent)
return (100 * Percent) / Files.Length;
private void UpdateProgressBar(int Percent)
if (Percent < 0 || Percent > 100)
if (!Progress.IsDisposed)
Progress.Value = Percent;
private void RemoveFromPath(string Remove)
if (Remove == string.Empty)
Result.Text = Result.Text.Replace(Remove, string.Empty);
filePath.Text = filePath.Text.Replace(Remove, string.Empty);
private void StartBrowsing()
if (folderBrowserDialog.ShowDialog() == DialogResult.OK)
filePath.Text = folderBrowserDialog.SelectedPath.Replace(@"\", "/");
if (!backgroundWorker.IsBusy)
backgroundWorker.RunWorkerAsync(folderBrowserDialog.SelectedPath);
saveFileDialog.FileName = "ListaPatch.txt";
saveFileDialog.Filter = "Text files (*.txt)|*.txt|Every file (*.*)|*.*";
if (saveFileDialog.ShowDialog() == DialogResult.OK)
StringBuilder sr = new StringBuilder();
string[] lines = Result.Text.Split('\n');
foreach (var line in lines)
var lineParams = line.Split(' ');
if(lineParams.Length > 2)
var endLine = " " + lineParams[lineParams.Length - 2] + " " + lineParams[lineParams.Length - 1];
var start = line.Replace(endLine, "");
sr.Append("\"" + start + "\"" + endLine);
using (StreamWriter streamWriter = new StreamWriter(saveFileDialog.FileName))
streamWriter.Write(sr.ToString());