2012-03-29 7 views
0

내가 파일을 만드는거야 방법이다. 어떻게 저장합니까? 직접적으로 가능하지만 코드를 사용하면 오류가 발생합니다.불법 이름으로 파일을 저장하는 방법은 다음과

+4

'무슨 윈도우 7에 파일 이름에 유효한 문자 A'되어있다 스웨덴어 :)에게 또한입니다 에 대해 말하다? – Oded

+0

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

+0

어떤 오류가 발생하고 있습니까? 정확한 메시지를 게시하고 예외의 스택 추적을 가져올 수 있습니까? 또한 name 변수의 정확한 값. –

답변

3

경로가 사용자가 제어하고 잠재적으로 잘못된 파일 시스템 문자를 포함하는 경우 사용자에게 이름을 변경하거나 잘못된 문자를 결정적 방식으로 표준화하도록 요청해야합니다. 한 가지 방법은 잘못된 문자를 모두 밑줄로 바꾸는 것입니다. 으로 여러 사람이 지적

, 그것은 디렉토리 및 파일 이름을 결합 여기 Path.Combine를 사용하는 가장 좋은 방법입니다

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

편집을 다음과 같이

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 = 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

당신은 다만 수 : BTW

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); 

: 나는

+0

으로 바꿀 것입니다. 이는 잘못된 문자를 대체하지 않으며 잘못된 문자의 * all * 만 대체합니다. – Servy

+0

구문 오류와 논리적 오류 외에도 'Path.ChangeExtension'은 잘못된 문자가 있으면'ArgumentException'을 throw합니다. – user7116

+0

나는 그것을 편집 했으므로 이제 작동하지만, 나는 JareedPar의 해결책에 매우 근접하게되었다. – mortb

관련 문제