Created
August 6, 2013 13:58
-
-
Save kgabis/6164660 to your computer and use it in GitHub Desktop.
Removes raws without matching xmp file.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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