.NET TIPS

一時ファイル用のランダムなファイル名を生成するには?[2.0のみ、C#、VB]

デジタルアドバンテージ 遠藤 孝信
2007/02/09

 プログラムで一時ファイルを作成する場合、そのフォルダにあるほかのファイルと重ならないようなファイル名が必要となる。

 このような用途のために、Pathクラス(System.IO名前空間)にはGetTempFileNameメソッドが用意されている(このメソッドについては「TIPS:一時ファイル(テンポラリ・ファイル)を作成するには?」を参照)。

 しかしこのメソッドは、ファイル名を生成する過程で、実際にそのファイル(サイズは0)を一時フォルダに作成するという副作用がある(これにより一時フォルダにあるほかのファイルと確実に重複しないファイル名を生成しているのだが)。

 .NET Framework 2.0のクラス・ライブラリでは、一時ファイルのファイル名として利用できるランダムなファイル名を返すGetRandomFileNameメソッドが追加されている。このメソッドは乱数を基にして8.3形式のランダムな文字列を返す。単に文字列が返されるだけで、一時ファイルは作成されない。以下にその使用例を示す。

// randomfilename.cs

using System;
using System.IO;

class RandomFileName {
  static void Main() {

    for (int i = 0; i < 5; i++) {
      string name = Path.GetRandomFileName();
      Console.WriteLine(name);
    }
    // 出力例:
    // o3hjfqix.jtq
    // 4czxorzg.1iy
    // kc10ck3j.z30
    // pyyl11mu.fr5
    // y51ezu5u.hpg
  }
}

// コンパイル方法:csc randomfilename.cs
ランダムなファイル名を表示するC#のサンプル・プログラム(randomfilename.cs)

' randomfilename.vb

Imports System
Imports System.IO

Class RandomFileName
  Shared Sub Main()

    For i As Integer = 1 To 5
      Dim name As String = Path.GetRandomFileName()
      Console.WriteLine(name)
    Next
    ' 出力例:
    ' o3hjfqix.jtq
    ' 4czxorzg.1iy
    ' kc10ck3j.z30
    ' pyyl11mu.fr5
    ' y51ezu5u.hpg
  End Sub
End Class

' コンパイル方法:vbc randomfilename.vb
ランダムなファイル名を表示するVBのサンプル・プログラム(randomfilename.vb)

 GetRandomFileNameメソッドは、暗号化に使用される厳密な乱数を使用してファイル名を生成する(具体的にはSystem.Security.Cryptography名前空間のRNGCryptoServiceProviderクラスを使用している)。このためGetRandomFileNameメソッドが生成するファイル名が重複する確率は限りなくゼロに近く、実際に一時ファイルを作成する必要もないというわけだ。End of Article

利用可能バージョン:.NET Framework 2.0のみ
カテゴリ:クラス・ライブラリ 処理対象:ディレクトリ&ファイル
使用ライブラリ:Pathクラス(System.IO名前空間)
関連TIPS:一時ファイル(テンポラリ・ファイル)を作成するには?

この記事と関連性の高い別の.NET TIPS
一時ファイル(テンポラリ・ファイル)を作成するには?
一時フォルダ(テンポラリ・フォルダ)を取得するには?
Visual Studio 2005の一時プロジェクトが作成されるフォルダは?
[ASP.NET]ページから生成されたソース・コードを見るには?
ファイルやディレクトリの作成/変更/削除を監視するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間