【C#】一時ファイルを作成する・一時フォルダの場所を取得する (Path.GetTempFileName)

アプリケーションの処理中に、作業用の一時データ(キャッシュやログ、ダウンロード中の中間ファイルなど)を保存したい場合、システム標準の「一時フォルダ(Temp)」を利用するのが一般的です。

Path.GetTempFileName メソッドを使用すると、一時フォルダ内に「重複しない一意な名前」を持つ空のファイルを自動的に作成し、そのフルパスを返してくれます。

目次

一時ファイルのライフサイクル実装

以下のコードでは、一時ファイルを作成し、データを書き込んで処理を行った後、最後に確実に削除するまでの流れを実装しています。

サンプルコード

using System;
using System.IO;

public class Program
{
    public static void Main()
    {
        // 1. システムの一時フォルダのパスを取得
        // Windowsの場合、通常は C:\Users\ユーザー名\AppData\Local\Temp\ など
        string tempDir = Path.GetTempPath();
        Console.WriteLine($"一時フォルダ: {tempDir}");

        // 2. 一時ファイルを生成する
        // このメソッドを実行した瞬間に、ディスク上に空のファイル(0バイト)が作成されます
        string tempFilePath = Path.GetTempFileName();
        Console.WriteLine($"作成された一時ファイル: {tempFilePath}");

        try
        {
            // 3. 一時ファイルを利用する
            // ここではテキストデータを書き込んでみます
            Console.WriteLine("--- データ書き込み中 ---");
            File.WriteAllText(tempFilePath, "Temporary Processing Data: 12345");

            // 内容を確認
            string content = File.ReadAllText(tempFilePath);
            Console.WriteLine($"読み込み内容: {content}");
        }
        finally
        {
            // 4. 後始末 (重要)
            // Path.GetTempFileNameで作ったファイルは自動では消えません。
            // 使い終わったら必ず削除するようにします。
            if (File.Exists(tempFilePath))
            {
                File.Delete(tempFilePath);
                Console.WriteLine("--- 一時ファイルを削除しました ---");
            }
        }
    }
}

実行結果(例)

一時フォルダ: C:\Users\UserName\AppData\Local\Temp\
作成された一時ファイル: C:\Users\UserName\AppData\Local\Temp\tmpA1B2.tmp
--- データ書き込み中 ---
読み込み内容: Temporary Processing Data: 12345
--- 一時ファイルを削除しました ---

解説と技術的なポイント

1. Path.GetTempFileName の挙動

このメソッドは、「ファイル名の文字列を作る」だけでなく、実際にファイルをディスク上に作成します。 これにより、他のプログラムと同じ名前が衝突するのを防いでいます。生成されるファイル名は tmpXXXX.tmp のような形式になります。

2. 削除の重要性

作成された一時ファイルは、OSや.NETランタイムによって自動的に削除されることはありません。 放置すると一時フォルダにゴミファイルが溜まり続けるため、try-finally ブロックなどを使用して、処理終了後に File.Delete で削除する設計にする必要があります。

3. Path.GetRandomFileName との違い

ファイルを「作成」せずに、単に「ランダムなファイル名(文字列)」だけが欲しい場合は、Path.GetRandomFileName() を使用します。こちらはディスクへの書き込みを行いません。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次