我有一個應用程序,用空格替換「無效」字符(由我的正則表達式定義)。我想要它,以便如果文件名中有兩個或更多個空格,請修剪一個。例如:正則表達式 - 擺脫雙空白?
Deal A & B.txt
我的應用程序運行後,將被重命名爲Deal A B.txt
(3個空間B/W A和B)。我想要的是這樣的:Deal A B.txt
(A和B之間的一個空格)。
我想確定如何做到這一點 - 我想我的應用程序將不得不通過所有文件名運行至少一次以替換無效字符,然後再次運行文件名以擺脫無關的空格。
有人可以幫我嗎?
這是目前用於替換無效字符我的代碼:
public partial class CleanNames : Form
{
public CleanNames()
{
InitializeComponent();
}
public void Sanitizer(List<string> paths)
{
string regPattern = (@"[~#&$!%+{}]+");
string replacement = " ";
Regex regExPattern = new Regex(regPattern);
StreamWriter errors = new StreamWriter(@"S:\Testing\Errors.txt", true);
var filesCount = new Dictionary<string, int>();
dataGridView1.Rows.Clear();
try
{
foreach (string files2 in paths)
{
string filenameOnly = System.IO.Path.GetFileName(files2);
string pathOnly = System.IO.Path.GetDirectoryName(files2);
string sanitizedFileName = regExPattern.Replace(filenameOnly, replacement);
string sanitized = System.IO.Path.Combine(pathOnly, sanitizedFileName);
if (!System.IO.File.Exists(sanitized))
{
DataGridViewRow clean = new DataGridViewRow();
clean.CreateCells(dataGridView1);
clean.Cells[0].Value = pathOnly;
clean.Cells[1].Value = filenameOnly;
clean.Cells[2].Value = sanitizedFileName;
dataGridView1.Rows.Add(clean);
System.IO.File.Move(files2, sanitized);
}
else
{
if (filesCount.ContainsKey(sanitized))
{
filesCount[sanitized]++;
}
else
{
filesCount.Add(sanitized, 1);
}
string newFileName = String.Format("{0}{1}{2}",
System.IO.Path.GetFileNameWithoutExtension(sanitized),
filesCount[sanitized].ToString(),
System.IO.Path.GetExtension(sanitized));
string newFilePath = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(sanitized), newFileName);
System.IO.File.Move(files2, newFilePath);
sanitized = newFileName;
DataGridViewRow clean = new DataGridViewRow();
clean.CreateCells(dataGridView1);
clean.Cells[0].Value = pathOnly;
clean.Cells[1].Value = filenameOnly;
clean.Cells[2].Value = newFileName;
dataGridView1.Rows.Add(clean);
}
}
}
catch (Exception e)
{
errors.Write(e);
}
}
private void SanitizeFileNames_Load(object sender, EventArgs e)
{ }
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
Application.Exit();
}
}
的問題是,一個重命名後,不是所有的文件將具有blankspaces相同數量。如在,我可以有Deal A&B.txt
其中重命名後將成爲Deal A B.txt
(1空間B /瓦A和B - 這很好)。但我也將有如下文件:Deal A & B & C.txt
重命名後:Deal A B C.txt
(A,B和C之間3個空格 - 不可接受)。
有沒有人有任何想法/代碼如何做到這一點?
這是否需要一個新的foreach循環後,我完成了「消毒」文件? – yeahumok 2010-07-09 15:06:32
@yeahumok請參閱我上面的修改。如果你現有的循環,只需在第一個之後添加第二個正則表達式。 – CodingWithSpike 2010-07-09 15:16:04
非常感謝你!這工作,它完全有道理:)我感謝您的幫助! – yeahumok 2010-07-09 15:33:02