[解決済み】パス名やファイル名から不正な文字を削除するには?
2022-03-23 11:24:24
質問
単純な文字列から不正なパスとファイル文字を削除する、堅牢でシンプルな方法が必要です。以下のコードを使用しましたが、何もしていないようです。
using System;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string illegal = "\"M<>\"\\a/ry/ h**ad:>> a\\/:*?\"<>| li*tt|le|| la\"mb.?";
illegal = illegal.Trim(Path.GetInvalidFileNameChars());
illegal = illegal.Trim(Path.GetInvalidPathChars());
Console.WriteLine(illegal);
Console.ReadLine();
}
}
}
解決方法は?
代わりに以下のようなものを試してみてください。
string illegal = "\"M\"\\a/ry/ h**ad:>> a\\/:*?\"| li*tt|le|| la\"mb.?";
string invalid = new string(Path.GetInvalidFileNameChars()) + new string(Path.GetInvalidPathChars());
foreach (char c in invalid)
{
illegal = illegal.Replace(c.ToString(), "");
}
しかし、私はコメントに同意せざるを得ません。私なら、違法なパスを合法的だがおそらく意図していないものにこじつけるのではなく、違法パスの発生源を何とかしようとするでしょうね。
Edit: Regexを使った「より良い」解決策もあります。
string illegal = "\"M\"\\a/ry/ h**ad:>> a\\/:*?\"| li*tt|le|| la\"mb.?";
string regexSearch = new string(Path.GetInvalidFileNameChars()) + new string(Path.GetInvalidPathChars());
Regex r = new Regex(string.Format("[{0}]", Regex.Escape(regexSearch)));
illegal = r.Replace(illegal, "");
それでも、そもそもなぜこんなことをするのか、という疑問が湧いてきます。
関連
-
[解決済み】Visual studio 2019がデバッグ時にフリーズする件
-
[解決済み] Bashスクリプトのソースディレクトリをスクリプト自体から取得するにはどうすればよいですか?
-
[解決済み] フォルダとそのサブフォルダ/ファイルのパーミッションを一括で変更する方法
-
[解決済み] どうすれば、文字列中のリテラルな中抜き文字を印刷し、また.formatを使用することができるのでしょうか?
-
[解決済み] Pythonでパスから拡張子なしでファイル名を取得する方法は?
-
[解決済み] 現在のファイルのディレクトリのフルパスを取得するにはどうすればよいですか?
-
[解決済み] Pythonでファイルの絶対パスを取得する方法
-
[解決済み] ファイルのフルパスを取得する方法は?
-
[解決済み] 文字列からテキストを削除するには?
-
[解決済み] Pythonで文字列から特定の文字を削除する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】「未割り当てのローカル変数を使用」とはどういう意味ですか?
-
[解決済み】"The ConnectionString property has not been initialized "を修正する方法
-
[解決済み】「namespace x already contains a definition for x」エラーの修正方法は?VS2010にコンバートした後に発生しました。
-
[解決済み】リソースの読み込みに失敗した:ステータス500(内部サーバーエラー)のサーバーの応答)
-
[解決済み】WPFでXamlファイルにコメントを追加する方法は?
-
[解決済み】なぜこのコードはInvalidOperationExceptionを投げるのですか?
-
[解決済み】MetadataException: 指定されたメタデータ・リソースをロードできない
-
[解決済み】データが存在しないのに読み込もうとする試みが無効である
-
[解決済み] HashSetとListの性能比較
-
[解決済み] Windowsで、指定した文字列が正当なファイル名であるかどうかを確認するにはどうすればよいですか?