PDA

Просмотр полной версии : [Помогите!] Сортировка файлов по папкам c#


Relapsein
23.03.2011, 22:09
:elefant::elefant::elefant::elefant:

CaptainAmerica
27.03.2011, 13:06
Прошу помощи в создании кода на c# , делать он будет следующее :
К примеру у нас есть папка "Windows" ,
В ней находятся файлы со следующими названиями :
port56893.doc
port45567.doc
more324563.doc
more456735.doc .
Как видно , начало у некоторых файлов одинаковое ,
этим способом я пытаюсь реализовать следуещее :
Файлы с именами "port****.doc" будут перемещены в папку "Port" ,
Файлы с именами "more*****.doc" будут перемещены в папку "More" ,
Т.е файлы с определенным началом названия , должны перемещаться в оп
ределенную папку .
DirectoryInfo dir = new DirectoryInfo(@"C:\Test_dir");// здесь будет твоя исходная папка: Windows или любая другая
FileInfo[] get_files = dir.GetFiles();
DirectoryInfo port_dir = Directory.CreateDirectory(@"C:\Test_dir\Port");
DirectoryInfo more_dir = Directory.CreateDirectory(@"C:\Test_dir\More");

foreach(FileInfo flf in get_files)
{
if (flf.Name.Contains("port"))
{
flf.MoveTo(@"C:\Test_dir\Port\"+flf.Name);
}
else
if (flf.Name.Contains("more"))
{
flf.MoveTo(@"C:\Test_dir\More\"+flf.Name);

}

}

CaptainAmerica
28.03.2011, 02:03
А если имен файлов много ? к примеру 7?
поверь, 7 - это не много.

Если использовать условия , надеюсь все не закончится на первых файлах =)
а foreach тебе не о чем не говорит ?
Также стоит проблема в одинаковых именах файлов , они вроде будут перезаписыватся .
а как по-твоему могут оказаться в одной папке файлы с одинаковыми именами ? правильно - у них разное расширение, а оно как известно является частью имени файла.... думаю понятно..

Diverclaim
28.03.2011, 22:15
Намного интереснее сделать программу которая сможет сортировать файлы заранее не зная "одинаковой части файлов". То есть не зная заранее что в начале файла стоит 'more' или 'port'. Если известно что в имени файла сначала идет название папки а потом цифры - то задача проще простого. Создаём список и добавляем в него все названия папок без повторений. Потом пробегаемся по этому списку и создаём соответствующие директории. Затем пробегаемся по файлам снова и уже раскидываем их по папкам.

Пример:

FolderBrowserDialog folderSelect = new FolderBrowserDialog();
folderSelect.ShowDialog();

DirectoryInfo fldrInfo = new DirectoryInfo(folderSelect.SelectedPath);
FileInfo[] allFiles = fldrInfo.GetFiles();

List<string> folderNames = new List<string>();
foreach (FileInfo file in allFiles)
{
if (!folderNames.Contains(GetName(file.Name)))
{
folderNames.Add(GetName(file.Name));
}
}

foreach (string fldrName in folderNames)
{
Directory.CreateDirectory(folderSelect.SelectedPat h + @"\SORTED\" + fldrName);
}

foreach (FileInfo file in allFiles)
{
File.Move(file.FullName, folderSelect.SelectedPath + @"\SORTED\" + GetName(file.Name) + @"\" + file.Name.Replace(GetName(file.Name), ""));
}

и GetName:

char[] arrayName = allName.ToCharArray();
StringBuilder bldr = new StringBuilder();

string endefers = "0123456789.";

for (int i = 0; i < arrayName.Length; i++)
{
if (endefers.IndexOf(arrayName[i]) == -1)
{
bldr.Append(arrayName[i]);
}
else
{
break;
}
}

return bldr.ToString();