C# でファイルをコピーする際に、コピー先のディレクトリが存在しない場合はエラーになります。
ファイルコピーする前にディレクトリ存在チェックを行い、存在しない場合は作成してからファイルコピーする関数を作成しましたので、紹介します。
static void CreateDirAndCopyFile(string sourceFullPath, string distFullPath)
{
string distDir = Path.GetDirectoryName(distFullPath);
if(!Directory.Exists(distDir)){
Directory.CreateDirectory(distDir);
}
File.Copy(sourceFullPath, distFullPath, true);
}
1. 引数は「コピー元のファイルフルパス」と「コピー先のファイルフルパス」
普通のコピーコマンドと同じような引数構成にしています。戻り値はありませんので、必要であればカスタマイズしてみてください。
2. コピ先ファイルフルパスから、ディレクトリパスを取得
フルパスからディレクトリパスを取得するには、以下の関数を使用します。
string distDir = Path.GetDirectoryName(distFullPath);
Path.GetDirectoryName 関数を使用します。戻り値にディレクトリパスが設定されます。
3. ディレクトリ存在チェック
ディレクトリ存在チェックを行うには、以下のように記述します。
Directory.Exists(distDir)
ディレクトリが存在する場合は「true」、存在しない場合は「false」が戻り値になります。
4. ディレクトリを作成する
ディレクトリを作成するには、以下のように記述します。
Directory.CreateDirectory(distDir)
Directory.CreateDirectory 関数にディレクトリパスを引数として設定すると、ディレクトリが作成できます。
5. ファイルをコピーする
File.Copy(sourceFullPath, distFullPath, true);
File.Copy 関数でファイルをコピーします。第三引数は、上書きするかどうかを指定します。Trueの場合、上書きします。
おすすめ本 c#コードレシピ集
c#コードレシピ集は、「文字列を大文字あるいは小文字に変換したい」や「Taskをキャンセルしたい」など逆引き的にコードの書き方を調べられるレシピ集です。
2021年8月に発売された本で、全部で385個のレシピが収録されています。
ジャンルは日付処理やLINQ、並列処理と非同期処理など幅広く記載されています。
Kindle対応ですので、まずはサンプルをダウンロードして何が書かれているか確認してはいかがでしょうか。
リンク
コメント