private void PasteFile(string path)
        {
            var type = PasteFiles(path, out string[] destPath, out string[] sourcePath);

            if (type != 0)
            {
                foreach (var v in Enumerable.Range(0, destPath.Length))
                {
                    var      dest     = destPath[v];
                    var      src      = sourcePath[v];
                    var      sha      = GetSHA256(src);
                    var      withTags = containTagList.ContainsKey(sha);
                    string[] tagData  = null;
                    if (withTags)
                    {
                        tagData = containTagList[sha].TagItems.ToArray();
                    }
                    if (type == 2)
                    {
                        if (Path.GetDirectoryName(src) == currentDirectory)
                        {
                            var fileName = Path.GetFileName(src);
                            var index    = GetFileItemsList().IndexOf(fileItems.FirstOrDefault(n => n.Name == fileName));
                            if (index >= 0)
                            {
                                GetFileItemsList().RemoveAt(index);
                            }
                            if (metroCheckBox1.Checked)
                            {
                                index = rawFileItems.IndexOf(fileItems.FirstOrDefault(n => n.Name == fileName));
                                if (index >= 0)
                                {
                                    rawFileItems.RemoveAt(index);
                                }
                            }
                            UpdateFileList();
                        }
                        if (withTags)
                        {
                            containTagList.Remove(sha);
                        }
                    }
                    if (dest.Contains(GetSSFolderPath()))
                    {
                        var newSHA = GetSHA256(dest);
                        if (tagData != null)
                        {
                            if (containTagList.ContainsKey(newSHA))
                            {
                                containTagList.Add(newSHA, new FilePathTagList()
                                {
                                    TagItems = tagData.ToList(), FilePath = dest
                                });
                            }
                            else
                            {
                                containTagList[newSHA].TagItems = tagData.ToList();
                            }
                        }
                        if (Path.GetDirectoryName(dest) == currentDirectory)
                        {
                            if (File.GetAttributes(dest).HasFlag(FileAttributes.Directory))
                            {
                                var dirInfo  = new DirectoryInfo(dest);
                                var fileItem = new FileItem();
                                fileItem.Name = dirInfo.Name;
                                fileItem.Size = new FileSize(-1);
                                fileItem.Date = dirInfo.LastWriteTime.ToString();
                                fileItem.AddTag("Folder");
                                GetFileItemsList().Add(fileItem);
                            }
                            else
                            {
                                var info     = new FileInfo(dest);
                                var fileItem = new FileItem();
                                fileItem.Name = info.Name;
                                fileItem.Size = new FileSize(info);
                                fileItem.Date = info.LastWriteTime.ToString();
                                if (containTagList.ContainsKey(newSHA))
                                {
                                    foreach (var tag in containTagList[newSHA].TagItems)
                                    {
                                        fileItem.AddTag(tag);
                                    }
                                }
                                GetFileItemsList().Add(fileItem);
                            }
                            UpdateFileList();
                        }
                    }
                }
            }
        }
        private void UpdateFileList()
        {
            if (!fileListRefresher.IsBusy)
            {
                var flag = false;
                if (fileItems == null)
                {
                    flag      = true;
                    fileItems = new SortableFileItems();
                }
                var selectedFile = "";
                if (lastSelectedFileIndex >= 0)
                {
                    selectedFile = fileItems[lastSelectedFileIndex].Name;
                }
                lastSelectedFileIndex = -1;
                fileItems.Clear();
                if (tempFileItems != null)
                {
                    rawFileItems  = tempFileItems;
                    tempFileItems = null;
                }
                if (metroCheckBox1.Checked && metroComboBox2.SelectedItem != null)
                {
                    tempFileItems = rawFileItems;
                    rawFileItems  = new List <FileItem>();
                    var           tagContainFiles = new Dictionary <string, string>();
                    var           selectedTag     = (metroComboBox2.SelectedItem as TagItem).Name;
                    List <string> missingFiles    = null;

                    foreach (var v in containTagList.Where(n => n.Value.TagItems.Contains(selectedTag)))
                    {
                        var path = v.Value.FilePath;
                        if (File.Exists(path))
                        {
                            var info     = new FileInfo(path);
                            var fileItem = new FileItem();
                            fileItem.Name = path;
                            fileItem.Size = new FileSize(info);
                            fileItem.Date = info.LastWriteTime.ToString();
                            fileItem.Tags.AddRange(v.Value.TagItems);
                            rawFileItems.Add(fileItem);
                        }
                        else
                        {
                            if (missingFiles == null)
                            {
                                missingFiles = new List <string>();
                            }

                            missingFiles.Add(v.Key);
                        }
                    }
                    if (missingFiles != null)
                    {
                        foreach (var v in missingFiles)
                        {
                            containTagList.Remove(v);
                        }
                    }
                }
                foreach (var v in rawFileItems)
                {
                    fileItems.Add(v);
                }
                metroGrid1.Enabled    = true;
                metroGrid1.DataSource = fileItems;
                metroGrid1.ScrollBars = ScrollBars.Both;
                ((CurrencyManager)metroGrid1.BindingContext[fileItems]).Refresh();
                metroGrid1.Columns[0].Frozen = true;
                metroGrid1.Refresh();
                if (flag)
                {
                    metroGrid1.Sort(metroGrid1.Columns[0], ListSortDirection.Descending);
                }
                if (!string.IsNullOrEmpty(selectedFile))
                {
                    var item  = fileItems.FirstOrDefault(n => n.Name == selectedFile);
                    var index = -1;
                    if (item != null)
                    {
                        index = fileItems.IndexOf(item);
                    }
                    if (index >= 0)
                    {
                        metroGrid1.Rows[index].Cells[0].Selected = true;
                        metroGrid1_SelectionChanged(metroGrid1, null);
                    }
                }
                SortRows(metroGrid1.SortedColumn, false);
            }
        }