0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【C#】指定のファイルを特定の場所にコピーするサンプルコード

Last updated at Posted at 2024-12-31

概要

指定のファイルを特定の場所にコピーする際のサンプルコードを記載しました。

コード


        /// <summary>
        ///  指定されたファイルを特定の場所にコピーする
        /// </summary>
        /// <param name="srcFilePath">コピーするファイルのパス</param>
        /// <param name="outputDirPath">コピー先のフォルダまでのパス</param>
        private void CopyFileToDirectory(string srcFilePath, string outputDirPath)
        {
            try
            {
                string fileName = Path.GetFileName(srcFilePath);
                string outputPath = Path.Combine(outputDirPath, fileName);  // ファイル名はコピー元と同様にする

                while (true)
                {
                    if (File.Exists(outputPath))
                    {
                        // 既にファイル名がある場合はリネームして再チェック
                        string extension = Path.GetExtension(fileName);
                        fileName = Path.GetFileNameWithoutExtension(fileName);
                        fileName += "_Copy" + extension;

                        outputPath = Path.Combine(outputDirPath, fileName);
                        continue;
                    }

                    break;
                }

                CopyFile(srcFilePath, outputPath);

            }
            catch (UnauthorizedAccessException)
            {
                // ログ出力等のエラーハンドル処理 (省略)
            }
            catch(Exception)
            {
                // ログ出力等のエラーハンドル処理 (省略)
            }
        }

        /// <summary>
        /// ファイルをコピーする
        /// </summary>
        /// <param name="fromPath">コピー元パス</param>
        /// <param name="toPath">コピー先パス</param>
        private void CopyFile(string fromPath, string toPath)
        {
            var file = new FileInfo(fromPath);
            file.CopyTo(toPath, true);       
        }

補足

本コードでは、コピー先に同じファイル名がある場合にリネームする対応を行っています。
※同じファイル名が無くなるまで、ファイル名の末尾に「_Copy」という文字列を加えます。

注意点

UnauthorizedAccessExceptionはファイルやディレクトリへのアクセス権限がない場合や、ファイルが読み取り専用モードになっている場合などに発生します。
特定のフォルダのアクセス権が有効かどうか、アクセスする前にあらかじめプログラムで計算するのはいろいろな考慮点が必要で、またアクセス権自体ももしかしたらアクセスの計算時に変わってしまう可能性もあります。そのため、上記のコードのような場合でアクセス権を調べる方法は実際にアクションを実行して、UnauthorizedAccessExceptionがスローされた状況を処理する方法が安全らしいです。

終わりに

ファイルをコピーするだけでも同名ファイルやフォルダへのアクセス権など、注意すべきことがいくつかあることをしっかりと把握しておきたいと思いました。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?