LeapCoders
- We program components for coders
// File Selection Manager
Overview
Adding File Selection Manager DLL to your .NET C# project allows you to carry out advanced recursive file selection, using pseudo SQL statements.
A time saver for any programming project, this allows you to quickly add features that would otherwise take weeks to program!
What can you do with the selected files?
- Order selection
- Copy files and directory structure
- Zip
- Unzip
- Rename
- Change Extension
- Move
- Delete
- Add prefix / suffix to the filename
- Replace a value or Regex in the filename
- Create a log file
Requirements
- Windows operating system
- Framework 4.0 or higher
Quick Start
1 - Add FileSelectionManager.DLL to your project references
2 - Add using directive in your code
using FileSelectionManager;
3 - Do an advanced selection of files using pseudo SQL statements
class Program
{
static void Main(string[] args)
{
String directory = @"C:\images";
Boolean recursive = true;
String condition = "Name Contains \"uni\" AND Length >= 5000 AND Length <= 15000";
FSM FSManager = new FSM();
/* Get files that contain the word "uni" in the file name and
* whose length is between 5000 and 15000 bytes */
FSManager.Dir(directory,recursive,condition);
foreach(FileInfo file in FSManager.SelectedFiles)
{
Console.WriteLine("{0} - {1} - {2} - {3} - {4} Bytes",
file.DirectoryName,
file.Name,
file.Extension,
file.CreationTime,
file.Length);
}
}
}
/* Output:
c:\images - university1.jpg - .jpg - 23/09/2010 10:54:48 - 9576 Bytes
c:\images - university main building.jpg - .jpg - 28/09/2010 12:34:28 - 13000 Bytes
*/
C# Samples
1 - Selecting files using the operators AND / OR [back to top]
class Program
{
static void Main(string[] args)
{
String directory = @"C:\images";
Boolean recursive = true;
String condition = "Name Contains \"uni\" AND Length >= 5000 AND Length <= 15000 OR
DirectoryName Contains \"dog pictures\"";
FSM FSManager = new FSM();
/* Get files that contain the word "uni" in the file name and
* whose length is between 5000 and 15000 bytes or
* whose directory name contains "dog pictures" */
FSManager.Dir(directory,recursive,condition);
foreach(FileInfo file in FSManager.SelectedFiles)
{
Console.WriteLine("{0} - {1} - {2} - {3} - {4} Bytes",
file.DirectoryName,
file.Name,
file.Extension,
file.CreationTime,
file.Length);
}
}
}
/* Output:
c:\images - university1.jpg - .jpg - 23/09/2010 10:54:48 - 9576 Bytes
c:\images - university main building.jpg - .jpg - 28/09/2010 12:34:28 - 13000 Bytes
c:\images\dog pictures - dog1.jpg - .jpg - 27/10/2011 12:34:28 - 16000 Bytes
c:\images\dog pictures - dog2.jpg - .jpg - 28/10/2011 12:37:48 - 18000 Bytes
c:\images\dog pictures - dog3.jpg - .jpg - 29/10/2011 12:39:18 - 19000 Bytes
*/
2 - Using all operators and all file properties [back to top]
class Program
{
static void Main(string[] args)
{
String directory = @"C:\images";
Boolean recursive = true;
String condition = "Name Contains \"dog\" AND Length >= 5000 AND Length <= 25000
AND Name !contains \"1\"
AND DirectoryName = \"c:\\images\dog pictures\"
AND CreationDate > 01/01/2010 AND CreationDate < 29/10/2011
AND Extension <> \".bmp\"";
FSM FSManager = new FSM();
/* Get files that contain the word "dog" in the file name and
* whose length is between 5000 and 25000 bytes and whose
* directory name is equal to "c:\images\dog pictures" and whose creation date
* is greather than 02/01/2010 and less than 28/10/2011
* and where the extesion is different to ".bmp" */
FSManager.Dir(directory,recursive,condition);
foreach(FileInfo file in FSManager.SelectedFiles)
{
Console.WriteLine("{0} - {1} - {2} - {3} - {4} Bytes",
file.DirectoryName,
file.Name,
file.Extension,
file.CreationTime,
file.Length);
}
}
}
/* Output:
c:\images\dog pictures - dog2.jpg - .jpg - 28/10/2011 12:37:48 - 18000 Bytes
*/
3 - Using ORDER BY clause [back to top]
class Program
{
static void Main(string[] args)
{
String directory = @"C:\images";
Boolean recursive = true;
String condition = "Extension = \".jpg\" ORDER BY DirectoryName ASC, CreationDate DESC";
FSM FSManager = new FSM();
/* Get files with ".jpg" extension ordered by DirectoryName in ascending direction and
* CreationDate in descending direction */
FSManager.Dir(directory,recursive,condition);
foreach(FileInfo file in FSManager.SelectedFiles)
{
Console.WriteLine("{0} - {1} - {2} - {3} - {4} Bytes",
file.DirectoryName,
file.Name,
file.Extension,
file.CreationTime,
file.Length);
}
}
}
/* Output:
c:\images - university main building.jpg - .jpg - 28/09/2010 12:34:28 - 13000 Bytes
c:\images - university1.jpg - .jpg - 23/09/2010 10:54:48 - 9576 Bytes
c:\images\dog pictures - dog3.jpg - .jpg - 29/10/2011 12:39:18 - 19000 Bytes
c:\images\dog pictures - dog2.jpg - .jpg - 28/10/2011 12:37:48 - 18000 Bytes
c:\images\dog pictures - dog1.jpg - .jpg - 27/10/2011 12:34:28 - 16000 Bytes
*/
4 - Using InvolvedFiles, AffectedFiles and SelectedFiles properties [back to top]
class Program
{
static void Main(string[] args)
{
String directory = @"C:\images";
Boolean recursive = true;
String condition = String.empty();
FSM FSManager = new FSM();
/* Get all files */
FSManager.Dir(directory,recursive,condition);
Console.WriteLine("Involved Files: {0} - Affected Files: {1} ",
FSManager.InvolvedFiles,
FSManager.AffectedFiles);
foreach(FileInfo file in FSManager.SelectedFiles)
{
Console.WriteLine("{0} - {1} - {2} - {3} - {4} Bytes",
file.DirectoryName,
file.Name,
file.Extension,
file.CreationTime,
file.Length);
}
}
}
/* Output:
Involved Files: 5 - Affected Files: 5
c:\images - university1.jpg - .jpg - 23/09/2010 10:54:48 - 9576 Bytes
c:\images - university main building.jpg - .jpg - 28/09/2010 12:34:28 - 13000 Bytes
c:\images\dog pictures - dog1.jpg - .jpg - 27/10/2011 12:34:28 - 16000 Bytes
c:\images\dog pictures - dog2.jpg - .jpg - 28/10/2011 12:37:48 - 18000 Bytes
c:\images\dog pictures - dog3.jpg - .jpg - 29/10/2011 12:39:18 - 19000 Bytes
*/
5 - Copying and moving files [back to top]
class Program
{
static void Main(string[] args)
{
String sourceDirectory = @"C:\images";
String destinationDirectory = @"C:\images_bck";
Boolean overWrite = true;
Boolean recursive = true;
String condition = "Name Contains \"uni\"";
FSM FSManager = new FSM();
/* Copy files that contain the word "uni" in the file name */
FSManager.CopyFiles(sourceDirectory,recursive,condition,destinationDirectory,overWrite);
Console.WriteLine("Involved Files: {0} - Affected Files: {1} ",
FSManager.InvolvedFiles,
FSManager.AffectedFiles);
foreach(FileInfo file in FSManager.SelectedFiles)
{
Console.WriteLine("{0} - {1} - {2} - {3} - {4} Bytes",
file.DirectoryName,
file.Name,
file.Extension,
file.CreationTime,
file.Length);
}
}
}
/* Output:
Involved Files: 2 - Affected Files: 2
c:\images - university1.jpg - .jpg - 23/09/2010 10:54:48 - 9576 Bytes
c:\images - university main building.jpg - .jpg - 28/09/2010 12:34:28 - 13000 Bytes
*/
class Program
{
static void Main(string[] args)
{
String sourceDirectory = @"C:\images";
String destinationDirectory = @"C:\images_bck";
Boolean overWrite = true;
Boolean recursive = true;
String condition = "Name Contains \"1\"";
FSM FSManager = new FSM();
/* Copies selected files and their directory structure */
FSManager.CopyFilesAndStructure(sourceDirectory,
recursive,
condition,
destinationDirectory,
overWrite);
Console.WriteLine("Involved Files: {0} - Affected Files: {1} ",
FSManager.InvolvedFiles,
FSManager.AffectedFiles);
foreach(FileInfo file in FSManager.SelectedFiles)
{
Console.WriteLine("{0} - {1} - {2} - {3} - {4} Bytes",
file.DirectoryName,
file.Name,
file.Extension,
file.CreationTime,
file.Length);
}
}
}
/* Output:
Involved Files: 2 - Affected Files: 2
c:\images - university1.jpg - .jpg - 23/09/2010 10:54:48 - 9576 Bytes
c:\images\dog pictures - dog1.jpg - .jpg - 27/10/2011 12:34:28 - 16000 Bytes
*/
class Program
{
static void Main(string[] args)
{
String sourceDirectory = @"C:\images";
String destinationDirectory = @"C:\images_bck";
Boolean overWrite = true;
Boolean recursive = true;
String condition = "Name Contains \"1\"";
FSM FSManager = new FSM();
/* Copies directory structure and moves selected files to new structure */
FSManager.CopyStructureAndMoveFiles(sourceDirectory,
recursive,
condition,
destinationDirectory,
overWrite);
Console.WriteLine("Involved Files: {0} - Affected Files: {1} ",
FSManager.InvolvedFiles,
FSManager.AffectedFiles);
foreach(FileInfo file in FSManager.SelectedFiles)
{
Console.WriteLine("{0} - {1} - {2} - {3} - {4} Bytes",
file.DirectoryName,
file.Name,
file.Extension,
file.CreationTime,
file.Length);
}
}
}
/* Output:
Involved Files: 2 - Affected Files: 2
c:\images - university1.jpg - .jpg - 23/09/2010 10:54:48 - 9576 Bytes
c:\images\dog pictures - dog1.jpg - .jpg - 27/10/2011 12:34:28 - 16000 Bytes
*/
class Program
{
static void Main(string[] args)
{
String sourceDirectory = @"C:\images";
String destinationDirectory = @"C:\images_bck";
Boolean overWrite = true;
Boolean recursive = true;
String condition = "Name Contains \"uni\"";
FSM FSManager = new FSM();
/* Moves selected files */
FSManager.MoveFiles(sourceDirectory,recursive,condition,destinationDirectory,overWrite);
Console.WriteLine("Involved Files: {0} - Affected Files: {1} ",
FSManager.InvolvedFiles,
FSManager.AffectedFiles);
foreach(FileInfo file in FSManager.SelectedFiles)
{
Console.WriteLine("{0} - {1} - {2} - {3} - {4} Bytes",
file.DirectoryName,
file.Name,
file.Extension,
file.CreationTime,
file.Length);
}
}
}
/* Output:
Involved Files: 2 - Affected Files: 2
c:\images - university1.jpg - .jpg - 23/09/2010 10:54:48 - 9576 Bytes
c:\images - university main building.jpg - .jpg - 28/09/2010 12:34:28 - 13000 Bytes
*/
6 - Renaming and deleting files [back to top]
class Program
{
static void Main(string[] args)
{
String directory = @"C:\images";
String newFileName = "dog9.jpg";
Boolean recursive = true;
String condition = "Name contain \"1\"";
FSM FSManager = new FSM();
/* Renames selected files with new name */
FSManager.RenameFiles(directory,recursive,condition,newFileName);
Console.WriteLine("Involved Files: {0} - Affected Files: {1} ",
FSManager.InvolvedFiles,
FSManager.AffectedFiles);
foreach(FileInfo file in FSManager.SelectedFiles)
{
Console.WriteLine("{0} - {1} - {2} - {3} - {4} Bytes",
file.DirectoryName,
file.Name,
file.Extension,
file.CreationTime,
file.Length);
}
}
}
/* Output:
Involved Files: 2 - Affected Files: 2
c:\images - university1.jpg - .jpg - 23/09/2010 10:54:48 - 9576 Bytes
c:\images\dog pictures - dog1.jpg - .jpg - 27/10/2011 12:34:28 - 16000 Bytes
*/
class Program
{
static void Main(string[] args)
{
String directory = @"C:\images";
Boolean recursive = true;
String condition = "Name Contains \"1\"";
FSM FSManager = new FSM();
/* Deletes selected files */
FSManager.DeleteFiles(directory,
recursive,
condition);
Console.WriteLine("Involved Files: {0} - Affected Files: {1} ",
FSManager.InvolvedFiles,
FSManager.AffectedFiles);
foreach(FileInfo file in FSManager.SelectedFiles)
{
Console.WriteLine("{0} - {1} - {2} - {3} - {4} Bytes",
file.DirectoryName,
file.Name,
file.Extension,
file.CreationTime,
file.Length);
}
}
}
/* Output:
Involved Files: 2 - Affected Files: 2
c:\images - university1.jpg - .jpg - 23/09/2010 10:54:48 - 9576 Bytes
c:\images\dog pictures - dog1.jpg - .jpg - 27/10/2011 12:34:28 - 16000 Bytes
*/
class Program
{
static void Main(string[] args)
{
String directory = @"C:\images";
String newExtension = ".jpg";
Boolean recursive = true;
String condition = "Name Contains \"1\"";
FSM FSManager = new FSM();
/* Changes the extension of selected files */
FSManager.ChangeExtension(directory,
recursive,
condition,
newExtension);
Console.WriteLine("Involved Files: {0} - Affected Files: {1} ",
FSManager.InvolvedFiles,
FSManager.AffectedFiles);
foreach(FileInfo file in FSManager.SelectedFiles)
{
Console.WriteLine("{0} - {1} - {2} - {3} - {4} Bytes",
file.DirectoryName,
file.Name,
file.Extension,
file.CreationTime,
file.Length);
}
}
}
/* Output:
Involved Files: 2 - Affected Files: 2
c:\images - university1.jpg - .jpg - 23/09/2010 10:54:48 - 9576 Bytes
c:\images\dog pictures - dog1.jpg - .jpg - 27/10/2011 12:34:28 - 16000 Bytes
*/
7 - Zipping and Unzipping files [back to top]
class Program
{
static void Main(string[] args)
{
String directory = @"C:\images";
String destinationDiretory = @"c:\zip_files";
String zipFileName = "container.zip";
Boolean recursive = true;
Boolean overWrite = true;
String condition = "Name Contains \"uni\"";
FSM FSManager = new FSM();
/* creates zipped file containing selected files */
FSManager.Zip(directory,recursive,condition,destinationDirectory,zipFileName,overWrite);
Console.WriteLine("Involved Files: {0} - Affected Files: {1} ",
FSManager.InvolvedFiles,
FSManager.AffectedFiles);
foreach(FileInfo file in FSManager.SelectedFiles)
{
Console.WriteLine("{0} - {1} - {2} - {3} - {4} Bytes",
file.DirectoryName,
file.Name,
file.Extension,
file.CreationTime,
file.Length);
}
}
}
/* Output:
Involved Files: 2 - Affected Files: 2
c:\images - university1.jpg - .jpg - 23/09/2010 10:54:48 - 9576 Bytes
c:\images - university main building.jpg - .jpg - 28/09/2010 12:34:28 - 13000 Bytes
*/
class Program
{
static void Main(string[] args)
{
String destinationDiretory = @"c:\zip_files";
String zipFileName = "container.zip";
Boolean unZipWithDirectoryStructure = true;
FSM FSManager = new FSM();
/* Unzips files with or without their directory structure */
FSManager.Unzip(zipFileName,
destinationDirectory,
unZipWithDirectoryStructure);
}
}
8 - Changing filenames [back to top]
class Program
{
static void Main(string[] args)
{
String directory = @"C:\images";
Boolean recursive = true;
String condition = "Name Contains \"uni\"";
String prefix = "NEW_";
FSM FSManager = new FSM();
/* Adds a prefix to the filename of selected files */
FSManager.AddPrefixToFileName(directory,recursive,condition,prefix);
Console.WriteLine("Involved Files: {0} - Affected Files: {1} ",
FSManager.InvolvedFiles,
FSManager.AffectedFiles);
foreach(FileInfo file in FSManager.SelectedFiles)
{
Console.WriteLine("{0} - {1} - {2} - {3} - {4} Bytes",
file.DirectoryName,
file.Name,
file.Extension,
file.CreationTime,
file.Length);
}
}
}
/* Output:
Involved Files: 2 - Affected Files: 2
c:\images - university1.jpg - .jpg - 23/09/2010 10:54:48 - 9576 Bytes
c:\images - university main building.jpg - .jpg - 28/09/2010 12:34:28 - 13000 Bytes
*/
class Program
{
static void Main(string[] args)
{
String directory = @"C:\images";
Boolean recursive = true;
String condition = "Name Contains \"uni\"";
String suffix = "_OLD";
FSM FSManager = new FSM();
/* Adds a suffix to the filename of selected files */
FSManager.AddSuffixToFileName(directory,
recursive,
condition,
suffix);
Console.WriteLine("Involved Files: {0} - Affected Files: {1} ",
FSManager.InvolvedFiles,
FSManager.AffectedFiles);
foreach(FileInfo file in FSManager.SelectedFiles)
{
Console.WriteLine("{0} - {1} - {2} - {3} - {4} Bytes",
file.DirectoryName,
file.Name,
file.Extension,
file.CreationTime,
file.Length);
}
}
}
/* Output:
Involved Files: 2 - Affected Files: 2
c:\images - university1.jpg - .jpg - 23/09/2010 10:54:48 - 9576 Bytes
c:\images - university main building.jpg - .jpg - 28/09/2010 12:34:28 - 13000 Bytes
*/
class Program
{
static void Main(string[] args)
{
String directory = @"C:\images";
Boolean recursive = true;
String condition = "Name Contains \"uni\"";
String oldValue = "university";
String newValue = "college";
FSM FSManager = new FSM();
/* Replaces a string in filename of selected files with the new string */
FSManager.ReplaceValueInFileName(directory,
recursive,
condition,
oldValue,
newValue);
Console.WriteLine("Involved Files: {0} - Affected Files: {1} ",
FSManager.InvolvedFiles,
FSManager.AffectedFiles);
foreach(FileInfo file in FSManager.SelectedFiles)
{
Console.WriteLine("{0} - {1} - {2} - {3} - {4} Bytes",
file.DirectoryName,
file.Name,
file.Extension,
file.CreationTime,
file.Length);
}
}
}
/* Output:
Involved Files: 2 - Affected Files: 2
c:\images - university1.jpg - .jpg - 23/09/2010 10:54:48 - 9576 Bytes
c:\images - university main building.jpg - .jpg - 28/09/2010 12:34:28 - 13000 Bytes
*/
class Program
{
static void Main(string[] args)
{
String directory = @"C:\images";
Boolean recursive = true;
String condition = "Name Contains \"uni\"";
String pattern = "\\s+";
String newValue = "_REGEX_";
FSM FSManager = new FSM();
/* Replaces regex pattern in filename of selected files with the new string */
FSManager.ReplaceRegexInFileName(directory,recursive,condition,pattern,newValue);
Console.WriteLine("Involved Files: {0} - Affected Files: {1} ",
FSManager.InvolvedFiles,
FSManager.AffectedFiles);
foreach(FileInfo file in FSManager.SelectedFiles)
{
Console.WriteLine("{0} - {1} - {2} - {3} - {4} Bytes",
file.DirectoryName,
file.Name,
file.Extension,
file.CreationTime,
file.Length);
}
}
}
/* Output:
Involved Files: 2 - Affected Files: 2
c:\images - university1.jpg - .jpg - 23/09/2010 10:54:48 - 9576 Bytes
c:\images - university main building.jpg - .jpg - 28/09/2010 12:34:28 - 13000 Bytes
*/
9 - Activate Logging [back to top]
Edit your App.config and add the following directives
<configuration>
<configSections>
<section name="FSMLog"
type="FileSelectionManager.FSMLogSection, FileSelectionManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
allowDefinition="Everywhere"
allowExeDefinition="MachineToApplication"
restartOnExternalChanges="true"/>
</configSections>
<FSMLog name="MyLog">
<logging fullPath="c:\FSMLog" fileName="FSManager.log" listAffectedFiles="true" active="true"/>
</FSMLog>
</configuration>
Advanced File Selection Using Pseudo SQL Statements:
AND / OR operators
=, <>, >, <, >=, <=, CONTAINS, !CONTAINS opetators
ORDER BY clause
Name, Extension, Length, DirectoryName, CreationDate and ModificationDate file properties
Useful Properties:
InvolvedFiles, AffectedFiles and SelectedFiles
Useful Methods:
Dir
CopyFiles
CopyFilesAndStructure
CopyStructureAndMoveFiles
Zip
Unzip
RenameFiles
AddPrefixToFileName
AddSuffixToFileName
ChangeExtension
MoveFiles
DeleteFiles
ReplaceValueInFileName
ReplaceRegexInFileName
Create LOG File:
Activate Logging