Я пытаюсь перебрать циклы foreach и выложить вывод в мое представление данных.
Представление таблицы данных имеет 3 определенных столбца: путь, старое имя файла, новое имя файла
Однако я продолжаю сталкиваться с ошибками.
Во-первых, вот код:
public partial class SanitizeFileNames : Form
{
public SanitizeFileNames()
{
InitializeComponent();
}
public void Sanitizer(List<string> paths)
{
string regPattern = (@"[~#&!%+{}]+");
string replacement = "";
Regex regExPattern = new Regex(regPattern);
List<string> existingNames = new List<string>();
StreamWriter errors = new StreamWriter(@"C:\Documents and Settings\bob.smith\Desktop\SharePointTesting\Errors.txt", true);
StreamWriter resultsofRename = new StreamWriter(@"C:\Documents and Settings\bob.smith\Desktop\SharePointTesting\Results of File Rename.txt", true);
dataGridView1.Rows.Clear();
var filesCount = new Dictionary<string, int>();
try
{
foreach (string files2 in paths)
{
string filenameOnly = Path.GetFileName(files2);
string pathOnly = Path.GetDirectoryName(files2);
string sanitizedFileName = regExPattern.Replace(filenameOnly, replacement);
string sanitized = Path.Combine(pathOnly, sanitizedFileName);
if (!System.IO.File.Exists(sanitized))
{
System.IO.File.Move(files2, sanitized);
DataGridViewRow dgr2 = new DataGridViewRow();
dgr2.Cells[0].Value = pathOnly;
dgr2.Cells[1].Value = filenameOnly;
dgr2.Cells[2].Value = sanitized;
resultsofRename.Write("Path: " + pathOnly + "\r\n" + "Old File Name: " + filenameOnly + "\r\n" + "New File Name: " + sanitized + "\r\n" + "\r\n");
}
else
{
if (filesCount.ContainsKey(sanitized))
{
filesCount[sanitized]++;
}
else
{
filesCount.Add(sanitized, 1);
}
string newFileName = String.Format("{0}{1}{2}",
Path.GetFileNameWithoutExtension(sanitized),
filesCount[sanitized].ToString(),
Path.GetExtension(sanitized));
string newFilePath = Path.Combine(Path.GetDirectoryName(sanitized), newFileName);
System.IO.File.Move(files2, newFilePath);
DataGridViewRow dgr2 = new DataGridViewRow();
dgr2.Cells[0].Value = pathOnly;
dgr2.Cells[1].Value = filenameOnly;
dgr2.Cells[2].Value = newFileName;
resultsofRename.Write("Path: " + pathOnly + "\r\n" + "Old File Name: " + Path.GetFileNameWithoutExtension(files2) + "\r\n" + "New File Name: " + newFileName + "\r\n" + "\r\n");
}
}
}
catch (Exception e)
{
errors.Write(e);
}
}
private void SanitizeFileNames_Load(object sender, EventArgs e)
{
}
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
}
}
Прежде всего, я новичок в C #, поэтому я даже не уверен на 100%, что это правильно. Этот код берет пути, которые передаются из другого метода, и «очищает» имена файлов, удаляя недопустимые символы (как определено в моем шаблоне регулярных выражений). Если имя файла уже существует, добавьте к имени файла число, которое увеличивается постепенно (т. Е. ~ Test.txt и% test.txt будут переименованы в test.txt. С моим кодом, ~ test.txt становится test.txt и% test.txt становится test1.txt).
Я пытаюсь в основном добавить эти данные в мое представление данных (если файл перейдет в другой цикл if (filesCount.ContainsKey (sanitized)).
Я получаю ошибки с Path.GetFileNameWithoutExtension (), Path.GetExtension (), Path.Combine (), Path.GetDIrectoryName (). Ошибка выглядит следующим образом:
'System.Windows.Forms.DataGridViewTextBoxColumn'
не содержит определения для
GetFileName и метод расширения
GetFileName принимает первый
аргумент типа
'System.Windows.Forms.DataGridViewTextBoxColumn'
может быть найден (вы пропускаете
используя директиву или сборку
ссылка?)
Понятия не имею, что это значит или как это исправить. Может кто-нибудь помочь?