private string CheckAndGetFilePath(AttachedFileInfo fi, bool checkFilePath = true)
        {
            if (fi == null)
            {
                throw new FileNotFoundException();
            }

            var hash           = Hasher.GetHash(fi.FullName);
            var fileName       = $"{hash}.bin";
            var fileStorageDir = FileStorageDir;

            if (!Directory.Exists(fileStorageDir))
            {
                Directory.CreateDirectory(fileStorageDir);
            }

            var filePath = Path.Combine(fileStorageDir, fileName);

            if (checkFilePath)
            {
                if (!File.Exists(filePath))
                {
                    throw new FileNotFoundException();
                }
            }

            return(filePath);
        }
        public void Delete(AttachedFileInfo fi)
        {
            if (CheckFile(fi))
            {
                var filePath = CheckAndGetFilePath(fi);
                File.Delete(filePath);

                DataStore.Delete(fi);
            }
        }
        private void TestDeleteFile(IFileManager fileManager, AttachedFileInfo fi)
        {
            var checkResult = fileManager.CheckFile(fi.Id);

            Assert.IsTrue(checkResult);

            fileManager.Delete(fi);

            var checkDeletedResult = fileManager.CheckFile(fi.Id);

            Assert.IsFalse(checkDeletedResult);
        }
        private bool CompareFi(AttachedFileInfo fi1, AttachedFileInfo fi2)
        {
            var result = true;

            result &= fi1.Id == fi2.Id;
            result &= fi1.Deleted == fi2.Deleted;
            result &= fi1.DeletedDate == fi2.DeletedDate;
            result &= fi1.Extension == fi2.Extension;
            result &= fi1.FileName == fi2.FileName;

            return(result);
        }
 public bool CheckFile(AttachedFileInfo fi)
 {
     try
     {
         var filePath = CheckAndGetFilePath(fi);
     }
     catch (FileNotFoundException)
     {
         return(false);
     }
     return(true);
 }
        public AttachedFileData GetData(AttachedFileInfo fileInfo)
        {
            var filePath = CheckAndGetFilePath(fileInfo);

            var data = new FileSystemAttachedFIleData
            {
                FileInfo = fileInfo,
                FileData = File.ReadAllBytes(filePath)
            };

            return(data);
        }
        private void TestCheckFile(IFileManager fileManager, AttachedFileInfo fi)
        {
            var checkResult = fileManager.CheckFile(fi);

            Assert.IsTrue(checkResult);

            var checkResult2 = fileManager.CheckFile(fi.Id);

            Assert.IsTrue(checkResult2);

            try
            {
                fileManager.CheckFile(-1);
            }
            catch (Exception e)
            {
                var correctException = e is FileNotFoundException;
                Assert.IsTrue(correctException);
            }
        }
        private void TestGetFileAndData(IFileManager fileManager, AttachedFileInfo fi1)
        {
            Assert.IsNotNull(fi1);
            var fd1 = fileManager.GetData(fi1);

            Assert.IsNotNull(fd1);

            var fi2 = fileManager.Get(fi1.Id);

            Assert.IsNotNull(fi2);
            var fd2 = fileManager.GetData(fi2.Id);

            Assert.IsNotNull(fd2);

            var fiEqualsResult = CompareFi(fi1, fi2);

            Assert.IsTrue(fiEqualsResult);

            var fdEqualsResult = CompareFd(fd1, fd2);

            Assert.IsTrue(fdEqualsResult);
        }
        public AttachedFileInfo Create(string fileName, byte[] data)
        {
            var fi = new AttachedFileInfo
            {
                FileName  = Path.GetFileNameWithoutExtension(fileName),
                Extension = Path.GetExtension(fileName)
            };

            var filePath = CheckAndGetFilePath(fi, false);

            if (File.Exists(filePath))
            {
                File.Delete(filePath);
            }

            File.Create(filePath).Close();

            File.WriteAllBytes(filePath, data);

            DataStore.Save(fi);

            return(fi);
        }
Exemplo n.º 10
0
        /// <summary>
        /// 添付ファイルの追加ボタン押下時イベント
        /// </summary>
        /// <param name="sender">イベント送信オブジェクト</param>
        /// <param name="e">イベント引数</param>
        private void BtnTenpuAdd_Click(object sender, EventArgs e)
        {
            var selected = this.CmbAttachFiles.Text;

            if (!File.Exists(selected))
            {
                MessageBox.Show("指定したファイルが見つかりません。");
                return;
            }

            var selectedItem = this.CmbAttachFiles.SelectedItem as AttachedFileInfo;

            if (selectedItem != null)
            {
                MessageBox.Show("追加時は、テキスト入力欄にパスを入力もしくはドラッグアンドドロップした後に実施してください。\n(リスト内のデータ選択時は無効です)");
                return;
            }

            var filePath = selected;

            var item = new AttachedFileInfo();

            if (!Directory.Exists(Config.Instance.AttachedFileRootDir))
            {
                Directory.CreateDirectory(Config.Instance.AttachedFileRootDir);
            }

            var taskKey = this.target.Key.Key;
            var taskDir = Path.Combine(Config.Instance.AttachedFileRootDir, taskKey);

            if (!Directory.Exists(taskDir))
            {
                Directory.CreateDirectory(taskDir);
            }

            // item.FilePath = Path.Combine(taskDir, info.DisplayName);
            item.OrgFilePath = filePath;

            var curFileNameList = new List <string>();

            foreach (var cmbItem in this.CmbAttachFiles.Items)
            {
                var info = cmbItem as AttachedFileInfo;
                if (info != null)
                {
                    curFileNameList.Add(info.DisplayName);
                }
            }

            var fileName     = Path.GetFileName(selected);
            var destFilePath = Path.Combine(taskDir, fileName);

            if (curFileNameList.Contains(fileName))
            {
                var ret = MessageBox.Show("同名のファイルを添付済みです。別名で保存しますか?\nYes:リネームして保存\nNo:上書き保存", "確認", MessageBoxButtons.YesNoCancel);
                if (ret == DialogResult.Yes)
                {
                    // コピーで保存
                    var copyFilePath    = filePath;
                    int offset          = 0;
                    var tmpFileName     = fileName;
                    var extension       = Path.GetExtension(tmpFileName);
                    var removeExtension = Path.GetFileNameWithoutExtension(tmpFileName);
                    while (true)
                    {
                        var append = removeExtension + string.Format("{0:D03}", offset);
                        tmpFileName = append;
                        if (!string.IsNullOrEmpty(extension))
                        {
                            tmpFileName = tmpFileName + "." + extension;
                        }

                        if (!curFileNameList.Contains(tmpFileName))
                        {
                            // ファイルが存在しなくなるまでリネーム
                            copyFilePath = Path.Combine(taskDir, tmpFileName);
                            break;
                        }

                        offset++;
                    }

                    destFilePath = copyFilePath;
                }
                else if (ret == DialogResult.No)
                {
                    // 上書き保存
                }
                else
                {
                    return;
                }
            }

            item.FilePath = destFilePath;

            this.CmbAttachFiles.Items.Add(item);

            this.attachFileAddList.Add(item);

            this.CmbAttachFiles.Text = string.Empty;
        }