• 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>