【发布时间】:2010-06-17 00:59:02
【问题描述】:
我不确定我在这里到底做错了什么......但我注意到我的 File.Move() 没有重命名任何文件。
另外,有人知道在我的第二个循环中如何使用路径列表和经过清理的文件名填充我的 .txt 文件吗?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Text.RegularExpressions;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
//recurse through files. Let user press 'ok' to move onto next step
string[] files = Directory.GetFiles(@"C:\Documents and Settings\jane.doe\Desktop\~Test Folder for [SharePoint] %testing", "*.*", SearchOption.AllDirectories);
foreach (string file in files)
{
Console.Write(file + "\r\n");
}
Console.WriteLine("Press any key to continue...");
Console.ReadKey(true);
//End section
//Regex -- find invalid chars
string pattern = " *[\\~#%&*{}/<>?|\"-]+ *";
string replacement = " ";
Regex regEx = new Regex(pattern);
string[] fileDrive = Directory.GetFiles(@"C:\Documents and Settings\jane.doe\Desktop\~Test Folder for [SharePoint] %testing", "*.*", SearchOption.AllDirectories);
List<string> filePath = new List<string>();
//clean out file -- remove the path name so file name only shows
string result;
foreach(string fileNames in fileDrive)
{
result = Path.GetFileName(fileNames);
filePath.Add(result);
}
StreamWriter sw = new StreamWriter(@"C:\Documents and Settings\jane.doe\Desktop\~Test Folder for [SharePoint] %testing\File_Renames.txt");
//Sanitize and remove invalid chars
foreach(string Files2 in filePath)
{
try
{
string sanitized = regEx.Replace(Files2, replacement);
sw.Write(sanitized + "\r\n");
System.IO.File.Move(Files2, sanitized);
System.IO.File.Delete(Files2);
}
catch (Exception ex)
{
Console.Write(ex);
}
}
sw.Close();
}
}
}
我对 C# 非常陌生,并尝试编写一个通过特定驱动器递归的应用程序,找到无效字符(如 RegEx 模式中指定的那样),将它们从文件名中删除,然后编写一个 .txt 文件,该文件具有路径名和更正后的文件名。
有什么想法吗?
【问题讨论】:
-
如果你是 C# 新手,千万不要在不处理异常的情况下执行 try/catch;您很可能忽略了解释问题所在的错误消息。
-
-
非常适合新程序员。现在,看到那个空的
catch { }块了吗?这就是您看不到真正错误的原因!试试catch(Exception ex) { Console.Write(ex); } -
我在我所做的编辑中将异常处理添加到我的代码中。但是,我没有任何例外。正在写入的 .txt 仅更改 .txt 文件中的字符串——而不是文件本身。