|
.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メソッドが生成するファイル名が重複する確率は限りなくゼロに近く、実際に一時ファイルを作成する必要もないというわけだ。
|
generated by
|
|
Insider.NET 記事ランキング
本日
月間