0

重複の可能性:
指定された文字列がWindowsで正当な(許可された)ファイル名であるかどうかをどのように確認しますか?

私は検索し、数分間グーグルで過ごしましたが、見つけたものを自分のコンテキストに適用することはできません。

string appPath = Path.GetDirectoryName(Application.ExecutablePath);
        string fname = projectNameBox.Text;
        if (projectNameBox.TextLength != 0)
        {

            File.Create(appPath + "\\projects\\" + fname + ".wtsprn");

したがって、projectNameBox.Textを取得し、ファイル名としてテキストを使用してファイルを作成していますが、:、\、または/などを含めると、クラッシュするだけです。これは通常のことです。フォルダ名..ファイルを作成する前にテキストを確認して文字を削除するにはどうすればよいですか、あるいは何もせずにそれらの文字を使用できないことをユーザーに通知するにはどうすればよいですか?前もって感謝します

4

2 に答える 2

1
string appPath = Path.GetDirectoryName(Application.ExecutablePath);
string fname = projectNameBox.Text;

bool _isValid = true;
foreach (char c in Path.GetInvalidFileNameChars())
{
    if (projectNameBox.Text.Contains(c))
    {
        _isValid = false;
        break;
    }
}

if (!string.IsNullOrEmpty(projectNameBox.Text) && _isValid)
{
    File.Create(appPath + "\\projects\\" + fname + ".wtsprn");
}
else
{
    MessageBox.Show("Invalid file name.", "Error");
}

別の方法として、最初のコメントで提供されているリンクに正規表現の例があります。

于 2012-08-28T23:16:07.757 に答える
1

TextBoxからTextChangedイベントに応答して、その内容に加えられた変更をインターセプトできます。projectNameBoxこれは、後でパスを作成する前に、無効な文字をすべて削除できることを意味します。

イベントハンドラーを作成するprojectNameBoxには、デザイナーでコントロールをクリックEventsし、ウィンドウのアイコンをクリックしてから、下に表示されるリストでイベントをPropertiesダブルクリックします。TextChanged以下は、無効な文字を取り除くコードの簡単な例です。

private void projectNameBox_TextChanged(object sender, EventArgs e)
{
    TextBox textbox = sender as TextBox;
    string invalid = new string(System.IO.Path.GetInvalidFileNameChars());
    Regex rex = new Regex("[" + Regex.Escape(invalid) + "]");
    textbox.Text = rex.Replace(textbox.Text, "");
}

System.Text.RegularExpressions(ファイルの先頭にもusingステートメントが必要です。)

于 2012-08-28T23:17:36.977 に答える