/// <summary>
        /// Returns an array of versioned files, optionally allowing for some prepended text to remove.
        /// </summary>
        /// <param name="prependedTextToRemove">Optional text to remove from the file name.</param>
        /// <param name="files">An array of files to work with.</param>
        /// <returns></returns>
        public static VersionedFile[] CreateVersionedFiles(string prependedTextToRemove, FileInfo[] files)
        {
            ArrayList array = new ArrayList();

            foreach (FileInfo file in files)
            {
                try
                {
                    // strip the file extention
                    string name = file.Name.Replace(file.Extension, null);

                    // remove prepended text here
                    name = name.Replace(prependedTextToRemove, null);

                    // create a version from the file name that's remaining
                    Version       version = new Version(name);
                    VersionedFile vf      = new VersionedFile(version, file);
                    array.Add(vf);
                }
                catch (Exception ex)
                {
                    Debug.WriteLine(ex);
                }
            }
            return(array.ToArray(typeof(VersionedFile)) as VersionedFile[]);
        }
        /// <summary>
        /// Converts the array of files to an array of versioned files
        /// </summary>
        /// <param name="files">The files to work with.</param>
        /// <returns></returns>
        public static VersionedFile[] CreateVersionedFiles(FileInfo[] files)
        {
            ArrayList array = new ArrayList();

            foreach (FileInfo file in files)
            {
                try
                {
                    string        name    = file.Name.Replace(file.Extension, null);
                    Version       version = new Version(name);
                    VersionedFile vf      = new VersionedFile(version, file);
                    array.Add(vf);
                }
                catch (Exception ex)
                {
                    Debug.WriteLine(ex);
                }
            }
            return(array.ToArray(typeof(VersionedFile)) as VersionedFile[]);
        }
        /// <summary>
        /// Sorts an array of versioned file objects.
        /// </summary>
        /// <param name="files">The array of items to sort.</param>
        /// <returns></returns>
        public static VersionedFile[] Sort(VersionedFile[] files)
        {
            // we could swap this bubble sort out for an IComparer implementation.

            // front to back - 1
            for (int i = 0; i < files.Length - 1; i++)
            {
                // front + 1 to back
                for (int j = i + 1; j < files.Length; j++)
                {
                    if (files[i].Version < files[j].Version)
                    {
                        // swap i with j, where i=1 and j=2
                        VersionedFile file = files[j];
                        files[j] = files[i];
                        files[i] = file;
                    }
                }
            }
            return(files);
        }
		/// <summary>
		/// Sorts an array of versioned file objects.
		/// </summary>
		/// <param name="files">The array of items to sort.</param>
		/// <returns></returns>
		public static VersionedFile[] Sort(VersionedFile[] files)
		{
			// we could swap this bubble sort out for an IComparer implementation.

			// front to back - 1 
			for(int i = 0; i < files.Length - 1; i++)
			{
				// front + 1 to back
				for(int j = i + 1; j < files.Length; j++)
				{			
					if (files[i].Version < files[j].Version)
					{											 
						// swap i with j, where i=1 and j=2
						VersionedFile file = files[j];
						files[j] = files[i];
						files[i] = file;
					}													
				}
			}
			return files;
		}		
		/// <summary>
		/// Returns the latest version available in the array of files
		/// </summary>
		/// <param name="versionedFiles">Returns the latest file based on it's version.</param>
		/// <returns></returns>
		public static VersionedFile GetLatestVersion(VersionedFile[] versionedFiles)
		{
			if (versionedFiles != null)
			{ 
				if (versionedFiles.Length > 0)
				{
					return versionedFiles[0];
				}
			}
			return null;
		}
		/// <summary>
		/// Returns an array of versioned files, optionally allowing for some prepended text to remove.
		/// </summary>
		/// <param name="prependedTextToRemove">Optional text to remove from the file name.</param>
		/// <param name="files">An array of files to work with.</param>
		/// <returns></returns>
		public static VersionedFile[] CreateVersionedFiles(string prependedTextToRemove, FileInfo[] files)
		{
			ArrayList array = new ArrayList();
			foreach(FileInfo file in files)
			{				
				try
				{
					// strip the file extention
					string name = file.Name.Replace(file.Extension, null);
					
					// remove prepended text here
					name = name.Replace(prependedTextToRemove, null);
					
					// create a version from the file name that's remaining
					Version version = new Version(name);
					VersionedFile vf = new VersionedFile(version, file);
					array.Add(vf);
				}
				catch (Exception ex)
				{
					Debug.WriteLine(ex);
				}
			}
			return array.ToArray(typeof(VersionedFile)) as VersionedFile[];
		}
		/// <summary>
		/// Converts the array of files to an array of versioned files
		/// </summary>
		/// <param name="files">The files to work with.</param>
		/// <returns></returns>
		public static VersionedFile[] CreateVersionedFiles(FileInfo[] files)
		{			
			ArrayList array = new ArrayList();
			foreach(FileInfo file in files)
			{				
				try
				{
					string name = file.Name.Replace(file.Extension, null);
					Version version = new Version(name);
					VersionedFile vf = new VersionedFile(version, file);
					array.Add(vf);
				}
				catch (Exception ex)
				{
					Debug.WriteLine(ex);
				}
			}
			return array.ToArray(typeof(VersionedFile)) as VersionedFile[];
		}