예제 #1
0
        public void FileNameComparer_Equals_ReturnsTrueForEqualFiles()
        {
            var comparer = new FileNameComparer();

            Assert.True(comparer.Equals(@"aa.txt", @"aa.txt"));
            Assert.True(comparer.Equals(@"./aa.txt", @"./aa/../aa.txt"));  // Path.GetFullPath can properly normalize path on linux only if it contains forward slashes. On Windows, any slashes work fine.
        }
예제 #2
0
        public void FileNameComparer_Equals_ReturnsTrueForEqualFiles()
        {
            var comparer = new FileNameComparer();

            Assert.IsTrue(comparer.Equals(@"aa.txt", @"aa.txt"));
            Assert.IsTrue(comparer.Equals(@".\aa.txt", @".\aa\..\aa.txt"));
        }
예제 #3
0
        public void Rotate()
        {
            // MaxGeneration が 0 または RotationSize が 0 の時はローテーションしない
            if (MaxGeneration <= 0 && RotationSize <= 0)
            {
                return;
            }

            string path = fs.Name;

            lock (this)
            {
                // 今のファイルをローテーション対象にリネーム
                Close();
                string newPath = addGenerationNum(path, 0);
                File.Move(path, newPath);
                Open(path);
            }

            // ファイルをローテーション
            FileNameComparer cmp = new FileNameComparer(path);

            deleteOldGeneration(path, cmp, MaxGeneration);
            incrementGeneration(path, cmp);
        }
예제 #4
0
        }         // Main

        private static void ProcessDir(SortedDictionary <string, Stat> oStat, string sPath, ASafeLog oLog)
        {
            oLog.Info("Processing directory {0} started...", sPath);

            if (!Directory.Exists(sPath))
            {
                oLog.Alert("Directory not found: {0}.", sPath);
            }
            else
            {
                string[] aryFileNames = Directory.GetFiles(sPath, "EzBob.Web.log.201*.zip");

                FileNameComparer fnc = new FileNameComparer();

                Array.Sort <string>(aryFileNames, fnc);

                foreach (var sFileName in aryFileNames)
                {
                    ReadFromZip(oStat, sFileName, oLog);
                }

                string[] aryDirNames = Directory.GetDirectories(sPath);

                foreach (string sDirName in aryDirNames)
                {
                    oLog.Info("Subdirectory found: {0}.", sDirName);

                    ProcessDir(oStat, sDirName, oLog);
                }         // for each
            }             // if

            oLog.Info("Processing directory {0} complete.", sPath);
        }         // ProcessDir
예제 #5
0
        public void FileNameComparer_GetHashCode_ReturnsStringHashcode()
        {
            var comparer = new FileNameComparer();

            Assert.Equal("10".GetHashCode(), comparer.GetHashCode("10"));
            Assert.Equal("".GetHashCode(), comparer.GetHashCode(""));
            Assert.Equal(0, comparer.GetHashCode(null));
        }
예제 #6
0
        /// <summary>
        /// Bзменениt выделенной записи в списке файлов.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ListBoxRowTemplate_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            string filePath = (string)(sender as ListBox).SelectedItem;

            if (filePath != null)
            {
                var item = (MatchingResultViewModel)DocListDG.SelectedItem;
                FileNameComparer.SetScanFile(item, filePath);
            }
        }
        private int lastSortColumn = -1;                // Track the last clicked column

        /// <summary>
        /// Sorts the ListView by the clicked column, automatically
        /// reversing the sort order on subsequent clicks of the
        /// same column.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e">Provides the index of the clicked column.</param>
        private void lvFileList_ColumnClick(object sender, ColumnClickEventArgs e)
        {
            // Define a variable of the abstract (generic) comparer
            ListViewItemComparer comparer = null;

            // Create an instance of the specific comparer in the 'comparer'
            // variable. Since each of the explicit comparer classes is
            // derived from the abstract case class, polymorphism applies.
            switch (e.Column)
            {
            // Line count columns
            case 1:
            case 2:
            case 3:
                comparer = new FileLinesComparer();
                break;

            // The file extension column
            case 4:
                comparer = new FileExtensionComparer();
                break;

            // All other columns sort by file name
            default:
                comparer = new FileNameComparer();
                break;
            }

            // Set the sorting order
            if (lastSortColumn == e.Column)
            {
                if (lvFileList.Sorting == SortOrder.Ascending)
                {
                    lvFileList.Sorting = SortOrder.Descending;
                }
                else
                {
                    lvFileList.Sorting = SortOrder.Ascending;
                }
            }
            else
            {
                lvFileList.Sorting = SortOrder.Ascending;
            }
            lastSortColumn = e.Column;

            // Send the comparer the list view and column being sorted
            comparer.SortingList = lvFileList;
            comparer.Column      = e.Column;

            // Attach the comparer to the list view and sort
            lvFileList.ListViewItemSorter = comparer;
            lvFileList.Sort();
        }
예제 #8
0
        public void FileNameComparer_Equals_ReturnsTrueIfBothEmpty()
        {
            var comparer = new FileNameComparer();

            Assert.True(comparer.Equals("", ""));
            Assert.True(comparer.Equals(" ", ""));
            Assert.True(comparer.Equals("", " "));
            Assert.True(comparer.Equals(null, ""));
            Assert.True(comparer.Equals("", null));
            Assert.False(comparer.Equals("", "something"));
            Assert.False(comparer.Equals("something", ""));
        }
예제 #9
0
        // Установить папку сканов для одной строки.
        private void SetScanRowButton_Click(object sender, RoutedEventArgs e)
        {
            var item = (MatchingResultViewModel)DocListDG.SelectedItem;
            var path = ScanFolderTextBox.Text;

            if (string.IsNullOrEmpty(path))
            {
                return;
            }
            FindScanService?.SetScanFolder(item, path);
            FileNameComparer.FindAndSetScan(item, path);
        }
예제 #10
0
        // Установить папку сканов для акта и всех документов.
        private void SetScanGroupButton_Click(object sender, RoutedEventArgs e)
        {
            var models  = MatchingResultModels;
            var groupId = ((MatchingResultViewModel)DocListDG.SelectedItem).GroupId;
            var path    = ScanFolderTextBox.Text;

            if (string.IsNullOrEmpty(path))
            {
                return;
            }
            FindScanService?.SetScanFolder(models, groupId, path);
            FileNameComparer.FindAndSetScan(models, groupId, path);
        }
예제 #11
0
        /// <summary>
        /// Verifica o banco de dados e os arquivos existentes
        /// para decidir quais arquivos devem ser importados
        /// </summary>
        /// <returns>Arquivos não importados</returns>
        public List <String> GetFilesToProcess()
        {
            var files      = new List <String>();
            var comparer   = new FileNameComparer();
            var lastMaster = SqlField($"SELECT TOP(1) Arquivo FROM {ControlTable} WHERE Arquivo LIKE '{Prefix}%' ORDER BY Arquivo DESC");

            foreach (var f in GetAllFiles())
            {
                files.Add(f);
            }

            return(files);
        }
예제 #12
0
        private void incrementGeneration(string path, FileNameComparer cmp)
        {
            List <string> files = getLogFiles(path, cmp);

            files.Sort(cmp);

            foreach (string file in files)
            {
                int    newNum  = cmp.GetFileNum(file) + 1;
                string newFile = cmp.ReplaceFileNum(file, newNum);
                File.Move(file, newFile);
            }
        }
예제 #13
0
        private static List <string> getLogFiles(string path, FileNameComparer cmp)
        {
            string[]      files = Directory.GetFiles(Path.GetDirectoryName(path));
            List <string> ret   = new List <string>();

            for (int i = 0; i < files.Length; i++)
            {
                if (cmp.Match(files[i]))
                {
                    ret.Add(files[i]);
                }
            }
            return(ret);
        }
예제 #14
0
        private static void deleteOldGeneration(string path, FileNameComparer cmp, int delGen)
        {
            List <string> files = getLogFiles(path, cmp);

            foreach (string file in files)
            {
                int filenum = cmp.GetFileNum(file);
                if (filenum == int.MaxValue)
                {
                    continue;
                }
                if (delGen <= filenum)
                {
                    File.Delete(file);
                }
            }
        }
예제 #15
0
파일: Log.cs 프로젝트: sitopmn/logviewer
        private List <Tuple <string, string, DateTime, long, int> > FindFiles()
        {
            var comparer = new FileNameComparer();

            return(_source.SelectMany(f =>
            {
                if (File.Exists(f))
                {
                    return new string[] { f };
                }
                else if (Directory.Exists(f))
                {
                    return Directory.EnumerateFiles(f);
                }
                else if (Directory.Exists(Path.GetDirectoryName(f)))
                {
                    return Directory
                    .EnumerateFiles(Path.GetDirectoryName(f))
                    .Where(f2 => f2.StartsWith(f));
                }
                else
                {
                    return new string[0];
                }
            }).SelectMany(file =>
            {
                if (Path.GetExtension(file) == ".zip")
                {
                    using (var stream = new FileStream(file, FileMode.Open, FileAccess.Read))
                        using (var archive = new ZipArchive(stream, ZipArchiveMode.Read))
                        {
                            return archive.Entries.Select(e => new Tuple <string, string, DateTime, long>(file, e.FullName, e.LastWriteTime.DateTime, e.Length));
                        }
                }
                else
                {
                    var info = new FileInfo(file);
                    return new [] { new Tuple <string, string, DateTime, long>(file, string.Empty, info.LastWriteTime, info.Length) };
                }
            })
                   .OrderBy(f => f.Item1, comparer)
                   .ThenBy(f => f.Item2, comparer)
                   .Select((f, i) => new Tuple <string, string, DateTime, long, int>(f.Item1, f.Item2, f.Item3, f.Item4, i))
                   .ToList());
        }
예제 #16
0
    // Use this for initialization
    void Start()
    {
        _slicer       = GetComponent <Slicer>();
        _main         = GetComponent <Main>();
        _currentSlice = _slicer.Slice;
        _slicesPath   = GetComponent <ConfigProperties>().slicesPath;
        _slicesHttp   = GetComponent <ConfigProperties>().slicesHttp;
        _sliceDepth   = GetComponent <ConfigProperties>().slicesThickness;
        _pixelSize    = GetComponent <ConfigProperties>().slicesPixelSize;

        _texture       = new Texture2D(1, 1);
        _refreshAspect = true;

        // folder info
        DirectoryInfo info = new DirectoryInfo(_slicesPath);

        _filesInfo   = info.GetFiles("*.jpg");
        _slicesCount = _filesInfo.Length;

        // sort files
        IComparer comparer = new FileNameComparer();

        Array.Sort(_filesInfo, comparer);

        _realSliceNumbers = new Dictionary <int, int>();
        for (int i = 1; i <= _slicesCount; i++)
        {
            _realSliceNumbers[i] = int.Parse(_filesInfo[i - 1].Name.Split('.')[0]);
        }

        // load slice
        slice.GetComponent <Renderer>().material.mainTexture = _texture;
        DownloadSlice(_currentSlice);

        // memmory stuff
        _lastUnload = DateTime.Now;
    }
예제 #17
0
        public void FileNameComparer_Equals_IsCaseInsensitive()
        {
            var comparer = new FileNameComparer();

            Assert.True(comparer.Equals(@"aa.txt", @"AA.txt"));
        }
예제 #18
0
        //---------------------------------------------------------------------------------------------------------------------

        /// <summary>Runs the latest database upgrade scripts for this software item.</summary>
        public virtual bool Upgrade()
        {
            if (Tool.LastFailurePhase > ProcessPhaseType.InstallAndUpgrade)
            {
                return(false);
            }
            if (Tool.LastFailurePhase == ProcessPhaseType.InstallAndUpgrade && !Tool.AfterFailureCheckpoint && this != Tool.LastFailureItem)
            {
                return(false);
            }

            bool isFailureItem = Tool.LastFailurePhase == ProcessPhaseType.InstallAndUpgrade && this == Tool.LastFailureItem;

            string dir = String.Format("{0}{1}db", BaseDir, Path.DirectorySeparatorChar);

            if (!Directory.Exists(dir))
            {
                return(false);
            }

            List <string> files = new List <string>(Directory.GetFiles(dir, "db-*#.sql"));

            files.Sort(new FileNameComparer());
            int count = 0;

            // Execute only scripts with version > PreviousVersion or, in case of failure in the previous run for the current, item
            foreach (string file in files)
            {
                Match match = Regex.Match(file, @"db-([\d\.]+)#\.sql$");
                if (!match.Success)
                {
                    continue;
                }

                string currentFileVersion = match.Groups[1].Value;
                if (FileNameComparer.Compare(currentFileVersion, Version) <= 0 && (!isFailureItem || currentFileVersion != Tool.LastFailureItemVersion))
                {
                    continue;
                }
                if (isFailureItem && Tool.AfterFailureCheckpoint)
                {
                    continue;
                }

                Version = currentFileVersion;

                Tool.WriteSeparator();
                if (Tool.Interactive)
                {
                    Console.WriteLine("Upgrade {0} to version {1}{2}\n({3}):", ItemsCaption, Version, isFailureItem && !Tool.AfterFailureCheckpoint ? String.Format(" (recovering from {0})", Tool.CheckpointText) : String.Empty, file);
                }
                Tool.ExecuteSqlScript(file, this);

                RegisterVersion();
                count++;

                if (isFailureItem)
                {
                    break;
                }
            }

            return(count != 0);
        }
예제 #19
0
        //---------------------------------------------------------------------------------------------------------------------

        /// <summary>Runs the latest database cleanup scripts corresponding to the last upgrades for this software item.</summary>
        public virtual bool Cleanup()
        {
            if (Tool.LastFailurePhase > ProcessPhaseType.Cleanup)
            {
                return(false);
            }
            if (Tool.LastFailurePhase == ProcessPhaseType.Cleanup && !Tool.AfterFailureCheckpoint)
            {
                return(false);
            }

            bool isFailureItem = Tool.LastFailurePhase == ProcessPhaseType.Cleanup && this == Tool.LastFailureItem;

            string dir = String.Format("{0}{1}db", BaseDir, Path.DirectorySeparatorChar);

            if (!Directory.Exists(dir))
            {
                return(false);
            }

            string[] files = Directory.GetFiles(dir, "db-*c.sql");

            Array.Sort(files, new FileNameComparer());
            int count = 0;

            foreach (string file in files)
            {
                Match match = Regex.Match(file, @"db-([\d\.]+)c\.sql$");
                if (!match.Success)
                {
                    continue;
                }

                string currentFileVersion = match.Groups[1].Value;

                // Process file only if current file version is greater than last CleanupVersion, otherwise skip file
                if (FileNameComparer.Compare(currentFileVersion, CleanupVersion) <= 0 && (!isFailureItem || currentFileVersion != Tool.LastFailureItemVersion))
                {
                    continue;
                }

                // Skip if current file is beyond Version
                if (FileNameComparer.Compare(currentFileVersion, Version) > 0)
                {
                    continue;
                }

                CleanupVersion = currentFileVersion;

                Tool.WriteSeparator();
                if (Tool.Interactive)
                {
                    Console.WriteLine("Run {0} cleanup for version {1}{2}\n({3}):", ItemsCaption, CleanupVersion, isFailureItem && !Tool.AfterFailureCheckpoint ? String.Format(" (recovering from {0})", Tool.CheckpointText) : String.Empty, file);
                }
                Tool.ExecuteSqlScript(file, this);
                RegisterCleanupVersion();

                count++;
            }

            return(count != 0);
        }
예제 #20
0
		private int lastSortColumn = -1;	// Track the last clicked column

		/// <summary>
		/// Sorts the Vista_Api.ListView by the clicked column, automatically
		/// reversing the sort order on subsequent clicks of the
		/// same column.
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e">Provides the index of the clicked column.</param>
		private void lvFileList_ColumnClick(object sender, ColumnClickEventArgs e)
		{
			// Define a variable of the abstract (generic) comparer
			ListViewItemComparer comparer = null;

			// Create an instance of the specific comparer in the 'comparer'
			// variable. Since each of the explicit comparer classes is
			// derived from the abstract case class, polymorphism applies.
			switch (e.Column)
			{
					// Line count columns
				case 1:
				case 2:
				case 3:
					comparer = new FileLinesComparer();
					break;
					// The file extension column
				case 4:
					comparer = new FileExtensionComparer();
					break;
					// All other columns sort by file name
				default:
					comparer = new FileNameComparer();
					break;
			}

			// Set the sorting order
			if (lastSortColumn == e.Column)
			{
				if (lvFileList.Sorting == SortOrder.Ascending)
				{
					lvFileList.Sorting = SortOrder.Descending;
				}
				else
				{
					lvFileList.Sorting = SortOrder.Ascending;
				}
			}
			else
			{
				lvFileList.Sorting = SortOrder.Ascending;
			}
			lastSortColumn = e.Column;

			// Send the comparer the list view and column being sorted
			comparer.SortingList = lvFileList;
			comparer.Column = e.Column;

			// Attach the comparer to the list view and sort
			lvFileList.ListViewItemSorter = comparer;
			lvFileList.Sort();
		}
예제 #21
0
 static FileNameComparer()
 {
     Default = new FileNameComparer();
 }