Skip to content

Instantly share code, notes, and snippets.

@kgabis
Created August 6, 2013 13:58
Show Gist options
  • Select an option

  • Save kgabis/6164660 to your computer and use it in GitHub Desktop.

Select an option

Save kgabis/6164660 to your computer and use it in GitHub Desktop.
Removes raws without matching xmp file.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace remrawxmp
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("RemRawXMP 0.(99) \nAuthor: Krzysztof Gabis (www.kgabis.pl [email protected])");
var xmps = new List<FileInfo>();
var raws = new List<FileInfo>();
var rawsToDelete = new List<FileInfo>();
xmps = Findxmps();
raws = FindRaws();
rawsToDelete = FindRawsToDelete(xmps, raws);
if (rawsToDelete.Count == 0)
{
return;
}
foreach (var raw in rawsToDelete)
{
Console.WriteLine(raw.FullName);
}
if (GetConfirmation(rawsToDelete))
{
DeleteFiles(rawsToDelete);
Console.ReadKey();
}
}
private static List<FileInfo> FindRaws()
{
var rawExtensions = new string[]
{"*.arw", "*.sfr", "*.sr2", "*.bay", "*.crw", "*.cr2",
"*.nef", "*.nrw", "*.orf", "*.pef", "*.ptx", "*.raw",
"*.rw2", "*.srw", "*.x3f", "*.dng"};
var output = new List<FileInfo>();
foreach (var extension in rawExtensions)
{
var dir = new DirectoryInfo(Environment.CurrentDirectory);
foreach (var f in dir.GetFiles(extension))
{
output.Add(f);
}
}
return output;
}
private static List<FileInfo> Findxmps()
{
var output = new List<FileInfo>();
var dir = new DirectoryInfo(Environment.CurrentDirectory);
foreach (var f in dir.GetFiles("*.xmp"))
{
output.Add(f);
}
return output;
}
private static List<FileInfo> FindRawsToDelete(List<FileInfo> xmps, List<FileInfo> raws)
{
var output = new List<FileInfo>();
FileInfo temp;
foreach (FileInfo rawfile in raws)
{
temp = null;
output.Add(rawfile);
foreach (FileInfo xmp in xmps)
{
if (RemoveExtension(xmp.Name) == RemoveExtension(rawfile.Name))
{
output.Remove(rawfile);
temp = xmp;
break;
}
}
if (temp != null)
{
xmps.Remove(temp);
}
}
return output;
}
private static string RemoveExtension(string filename)
{
return filename.Remove(filename.LastIndexOf('.'));
}
private static bool GetConfirmation(List<FileInfo> files)
{
double size = 0;
foreach (var file in files)
{
size += file.Length;
}
size /= 1024 * 1024;
Console.WriteLine("Delete {0} files ({1:0.000} MB)? y/n", files.Count, size);
return Console.ReadLine().ToLower().Trim() == "y";
}
private static void DeleteFiles(List<FileInfo> todelete)
{
int deleteCount = 0;
double deleteSize = 0;
double tempSize = 0;
foreach (var file in todelete)
{
Console.Write("Deleting {0}", file.Name);
try
{
tempSize = file.Length;
File.Delete(file.FullName);
Console.WriteLine(" - OK");
deleteCount++;
deleteSize += tempSize;
}
catch (Exception e)
{
Console.WriteLine(" - {0}", e.Message);
}
}
deleteSize /= 1024 * 1024;
Console.WriteLine("Deleted {0} file{1} ({2:0.000} MB).", deleteCount, (deleteCount > 1 ? "s" : ""), deleteSize);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment