2012-03-29 2 views
0

は、私は、ファイルを作成しています方法です。どのようにそれらを保存するには?それは直接可能ですが、コードで行うとエラーが発生します。違法な名前でファイルを保存する方法をここで

+4

:)スウェーデンもしていますについて話す? – Oded

+0

http://stackoverflow.com/questions/309485/c-sharp-sanitize-file-name – drch

+0

どのようなエラーが表示されますか?あなたは、あなたが得ている例外の正確なメッセージとスタックトレースを投稿できますか?また、name変数の正確な値。 –

答えて

3

パスがユーザーによって制御され、無効なファイルシステム文字が含まれている可能性がある場合は、ユーザーに名前を変更するか、不正な文字を確定的に正規化する必要があります。 1つの方法は、すべての無効な文字をアンダースコアに置き換えることです。

public static string NormalizeFileName(string input) { 
    var invalid = Path.GetInvalidPathChars(); 
    var builder = new System.Text.StringBuilder(); 
    foreach(char c in input) { 
    if (invalid.Contains(c)) { 
     builder.Append('_'); 
    } else { 
     builder.Append(c); 
    } 
    } 
    return builder.ToString(); 
} 

var originalName = Server.MapPath("..") + name + ".html"; 
var normalizedName = NormalizeFileName(originalName); 
System.IO.File.Create(normalizedName); 

EDIT

を次のようにいくつかの人々は、それがディレクトリとファイル名を結合するためにここにPath.Combineを使用するのがベストプラクティスですが、指摘されたようにあなたは、この機能を使用することができます。

var originalName = Path.Combine(Server.MapPath(".."), name + ".html"); 
+1

Path.Combine(Server.MapPath( "..")、Path.ChangeExtension(NormalizeFileName(name)、 ".html")) 'を使用した場合、コーナーケースが修正される可能性があります。 – user7116

+0

@sixlettervariables確かに、私はそれを更新します – JaredPar

0
System.IO.File.Create(Server.MapPath("..") + "\\" + name + ".html"); 
0

あなただけ行うことができます:

ところで
char [] illegal = Path.GetInvalidFileNameChars(); 
    StringBuilder newName = new StringBuilder(name.Length); 
    foreach(char ch in name) 
    { 
     if(Array.IndexOf(illegal, ch) > -1) 
     { 
      newName.Append('_'); 
     } 
     else 
     { 
      newName.Append(ch); 
     } 

    } 

name = Path.Combine(Server.MapPath(".."), Path.ChangeExtension(name, ".html")); 

File.Create(name); 

:私は `A`はあなたが何のWindows 7上のファイル名で有効な文字である

+0

これは無効な文字を置き換えず、無効な文字の* all *だけを置き換えます。 – Servy

+0

構文エラーと論理エラー以外に、無効な文字がある場合、 'Path.ChangeExtension'は' ArgumentException'をスローします。 – user7116

+0

私はそれを編集しましたので今は動作しますが、私はJaledParのソリューションに非常に近い – mortb

関連する問題