背景
前段時(shí)間小編開(kāi)發(fā)了一個(gè)控制臺(tái)程序,把數(shù)據(jù)庫(kù)中的數(shù)據(jù)取出來(lái)按照編碼名稱分別存儲(chǔ)文件,存儲(chǔ)文件之前檢查是否存在當(dāng)前文件,如果存在刪除。開(kāi)始小批量的數(shù)據(jù)還挺順利的,當(dāng)批量執(zhí)行問(wèn)題就來(lái)了,每次執(zhí)行到一半時(shí),創(chuàng)建的文件不增加反而變少了,經(jīng)過(guò)日志捕捉才發(fā)現(xiàn)是字段里包含特殊符號(hào)惹的禍。小編是按照字段編碼來(lái)當(dāng)文件名稱的,但是由于是比較老的數(shù)據(jù),編碼比較亂包含有特殊符號(hào),造成創(chuàng)建文件失敗,而且還刪除了其它的文件。怎么會(huì)刪除其它文件了,原來(lái)是搜索帶有“?”的文件名稱后會(huì)查出所有的文件然后刪除。怎么解決呢?過(guò)濾掉名稱中的“不可作為文件名的特殊符號(hào)”的字符,問(wèn)題解決。小編分享一下代碼:
代碼
主要是通過(guò)正則表達(dá)式實(shí)現(xiàn)
using?System;
using?System.Text.RegularExpressions;
class Program
{
static void Main()
{
string fileName = "my#關(guān)注公眾號(hào):DOTNET開(kāi)發(fā)跳槽?name*.txt";
string cleanedFileName = RemoveFileNameChars(fileName);
Console.WriteLine(cleanedFileName);
}
static string RemoveFileNameChars(string fileName)
{
// 正則表達(dá)式模式匹配不可作為文件名的特殊符號(hào)
string invalidChars = @"[\\/:*?""<>|]";
// 使用正則表達(dá)式替換特殊符號(hào)為空字符串
string cleanedFileName = Regex.Replace(fileName, invalidChars, "");
return cleanedFileName;
}
}
在上述代碼中的 `RemoveFileNameChars` 方法使用正則表達(dá)式模式 `[\\/???""<>|]` 匹配不可作為文件名的特殊符號(hào),并使用空字符串將它們替換掉。通過(guò)調(diào)用這個(gè)方法,你可以將文件名中的特殊符號(hào)去除掉。比如輸入的文件名是 `公眾號(hào)dotnet#開(kāi)發(fā)?跳槽*.txt"`,輸出的清理后的文件名是 `"公眾號(hào)dotnet開(kāi)發(fā)跳槽.txt"`。
結(jié)語(yǔ)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-559006.html
如果涉及到用代碼生成文件名稱,一定要注意是否有不可作為文件名的特殊符號(hào),否則會(huì)造成未知原因的bug,比如像小編描述“?”的bug,把文件刪除完了。希望本文對(duì)你有所收獲,你有更好的方法嗎?歡迎留言或者吐槽。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-559006.html
來(lái)源公眾號(hào):DotNet開(kāi)發(fā)跳槽
到了這里,關(guān)于特殊符號(hào)引發(fā)的bug,C#去除不可作為文件名的特殊符號(hào)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!