IT/C#

[C#] 파일/폴더명에 입력하면 안되는 문자 제거 (KeyPress vs. Regex)

Ella.J 2024. 3. 8. 11:31
728x90
반응형

 

윈도우에서 파일 혹은 폴더명에 입력하면 안 되는 문자는 다음과 같습니다.

/ \ : * ? " < > |

 

윈도우 파일탐색기 환경

 

1. TextBox KeyPress Event

C# WinForm UI

텍스트박스에 입력할 때 KeyPress 이벤트에서

누른 키가 해당 특수문자일 경우 제외하도록

아래와 같이 코드를 입력합니다.

위와 같이 특수문자를 입력할 경우

윈도우 환경과 동일하게 ToolTip도 표시해 줍니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ToolTip tooltip = new ToolTip();
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    // 누른 키가 파일명에 들어가면 안되는 경우 체크
    if ((e.KeyChar == '\\'|| (e.KeyChar == '/'|| (e.KeyChar == ':'|| 
        (e.KeyChar == '*'|| (e.KeyChar == '?'|| (e.KeyChar == '"'|| 
        (e.KeyChar == '<'|| (e.KeyChar == '>'|| (e.KeyChar == '|'))
    {
        e.Handled = true;
        tooltip.Show("A file name can't contain any of " +
            "the following characters:\r\n/\\:*?\"<>|", textBox1);
    } else
    {
        tooltip.Hide(this);
    }
}
cs

 

 

2. Regex 정규식

정규식을 사용하는 경우에는 키 입력 시 특수문자를 제외하지 않고,

사용자가 정한 파일명에서 해당 특수문자를 제외한 문자열만 반환하는 경우 사용합니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public Form1()
{
    InitializeComponent();
    string fileName = "ABC?EFG*";
    string resultFileName = ReplaceFileName(fileName);
    // resultFileName = ABCEFG
}
 
public static string ReplaceFileName(string s)
{
    Regex regex = new Regex(string.Format("[{0}]"
        Regex.Escape(new string(Path.GetInvalidFileNameChars()))));
    s = regex.Replace(s, "");
    return s;
}
cs

 

 

728x90
반응형