using System; using System.Windows.Forms; using System.IO; using System.Diagnostics; using Laj.FileUtils; namespace Laj.SWEgenskaper { // Last modified: 2002-10-19 // Version: 0.42 ID:LAJGAIS44 // Compiles with Microsoft Visual C# .NET 7.0.9466 on Windows 95. // The source code is free. It is not under any kind of license. // If this code works, it was written by Lars Johansson, Göteborg. // If not, I don't know who wrote it. internal class Backend { static internal ProcessSettings PS; static public void ProcessAll(string location, string[] files) { foreach (string fileName in files) { if (File.Exists(fileName) ) { Backend.ProcessFile(fileName); } else if (fileName.IndexOf(@"\") > -1) { if (Directory.GetParent(fileName).Exists) { Backend.DoDirectoryWalk(Directory.GetParent(fileName).FullName, fileName); } } else { string fullName = location + @"\" + fileName; if (Directory.GetParent(fullName).Exists) { Backend.DoDirectoryWalk(Directory.GetParent(fullName).FullName, fileName); } } } } static void ProcessFileInfo(FileInfo fi) { changeExtension(fi); changeCaption(fi); changeTouch(fi); changeAttributes(fi); } static public void ProcessFile(string fileName) { Debug.WriteLine("File: " + fileName); FileInfo fi = new FileInfo(fileName); ProcessFileInfo(fi); } static public void DoDirectoryWalk(string root, string searchPattern) { Laj.FileUtils.DirectoryWalker dw = new Laj.FileUtils.DirectoryWalker( new Laj.FileUtils.DirectoryWalker.ProcessDirCallback(processWalkDir), new Laj.FileUtils.DirectoryWalker.ProcessFileCallback(processWalkFile), searchPattern); dw.Walk(root, PS.WalkSubfolders); } static void processWalkDir(DirectoryInfo di, int level) { writeSpaces(level * 2); Debug.WriteLine("Dir: " + di.FullName); if (!PS.ProcessFolders) return; changeTouch(di); changeAttributes(di); } static void processWalkFile(FileInfo fi, int level) { writeSpaces(level * 2); Debug.WriteLine("File: " + fi.FullName); ProcessFileInfo(fi); } static void writeSpaces(int spaces) { for (int k = 0; k < spaces; k++) Debug.Write(" "); } static void changeExtension(FileInfo fi) { string name = fi.Name; int i = name.LastIndexOf("."); if (i > 0) name = name.Substring(0, i); string extension = fi.Extension; string path = fi.DirectoryName; if (PS.Extension.Change) { if (PS.Extension.NewExtension.Length > 0) { if (PS.Extension.NewExtension[0] != '.') extension = "." + PS.Extension.NewExtension; else extension = PS.Extension.NewExtension; } else extension = "." + PS.Extension.NewExtension; } fi.MoveTo(path + @"\" + name + extension); } static void changeCaption(FileInfo fi) { string name = fi.Name; int i = name.LastIndexOf("."); if (i > 0) name = name.Substring(0, i); string extension = fi.Extension; string path = fi.DirectoryName; if (PS.Capitalization.FileName.Change) { if (PS.Capitalization.FileName.ToUpper) name = name.ToUpper(); else name = name.ToLower(); } if (PS.Capitalization.Extension.Change) { if (PS.Capitalization.Extension.ToUpper) extension = extension.ToUpper(); else extension = extension.ToLower(); } fi.MoveTo(path + @"\" + name + extension); } static void changeTouch(FileSystemInfo fi) { try { if (PS.Touch.ChangeCreated) { //logger.LogFileDateChange(fi, "c"); fi.CreationTime = PS.Touch.NewCreationTime; } if (PS.Touch.ChangeModified) { //logger.LogFileDateChange(fi, "w"); fi.LastWriteTime = PS.Touch.NewLastWriteTime; } if (PS.Touch.ChangeAccessed) { //logger.LogFileDateChange(fi, "a"); fi.LastAccessTime = PS.Touch.NewLastAccessTime; } } catch (Exception exc) { Debug.WriteLine(exc.Message); } } static FileAttributes allFileAttributes = // Except FileAttributes.Normal FileAttributes.Archive | FileAttributes.Compressed | FileAttributes.Device | FileAttributes.Directory | FileAttributes.Encrypted | FileAttributes.Hidden | FileAttributes.NotContentIndexed | FileAttributes.Offline | FileAttributes.ReadOnly | FileAttributes.ReparsePoint | FileAttributes.SparseFile | FileAttributes.System | FileAttributes.Temporary; static void changeAttributes(FileSystemInfo fi) { if (PS.Attributes.ChangeReadOnly) { if (PS.Attributes.ReadOnly) fi.Attributes |= FileAttributes.ReadOnly; else fi.Attributes &= FileAttributes.ReadOnly ^allFileAttributes; } if (PS.Attributes.ChangeArchive) { if (PS.Attributes.Archive) fi.Attributes |= FileAttributes.Archive; else fi.Attributes &= FileAttributes.Archive ^allFileAttributes; } if (PS.Attributes.ChangeSystem) { if (PS.Attributes.System) fi.Attributes |= FileAttributes.System; else fi.Attributes &= FileAttributes.System ^allFileAttributes; } if (PS.Attributes.ChangeHidden) { if (PS.Attributes.Hidden) fi.Attributes |= FileAttributes.Hidden; else fi.Attributes &= FileAttributes.Hidden ^allFileAttributes; } } static public bool ShowOpenFileDialog(out string[] fileNames) { fileNames = new string[0]; OpenSaveDialogs.TheOpenFileDialog.Multiselect = true; bool ok = (OpenSaveDialogs.TheOpenFileDialog.ShowDialog() == DialogResult.OK); if (!ok) return false; fileNames = OpenSaveDialogs.TheOpenFileDialog.FileNames; return true; } private Backend() { } static Backend() { PS = new ProcessSettings(); OpenSaveDialogs.TheOpenFileDialog.Filter = "All Files (*.*)|*.*|Text Files (*.txt)|*.txt"; } } }