Przeniesienie plików do podfolderów (N plików w każdym folderze)

0

Cześć,

Mam pewien problem, który chciałem rozwiązać za pomocą programu. Niestety jestem raczej początkujący i troszkę się pogubiłem.

Problem jest następujący. Mam folder, w którym jets określona liczba plików (nie zawsze jest to taka sama liczba). Chciałby, aby program automatycznie poprzenosił je do folderów (nazwy mogą być losowe, obojętnie),, tak, aby w każdym z podfolderów było X plików.. Program miałby działać tak, że użytkownik wskazuje folder, naciska przycisk i to działa. Tę częśc mam.

Poległem natomiast na przeniesieniu określonej liczny plików do tych folderów. Problem polega na tym, że mam pomysł jak mógłbym to zrobić, ale nie wiem jak to napisać. Mam listę plików w tablicy:

string sciezka_z= @"E:\test_folder";
string sciezka_do= @"E:\test_folder\1";

string[] tablica_plikow= Directory.GetFiles(sciezka_z);

Mogę obie wszystko przenieść tak, ale to przenosi wszystko:

foreach (var plik in tablica_plikow){
     File.Move(System.IO.Path.Combine(sciezka_z, plik ), System.IO.Path.Combine(sciezka_do, plik ));
}

Próbowałem czegoś takiego.,, ale a każdym razem muszę od nowa odświeżać tabelę plików, co raczej nie jest za dobrym rozwiązaniem (po co robić coś kilka razy to samo)

while (tablica_plikow.Lenght > 0){
    foreach (plik in tablica_plikow.Take(50)){
     		File.Move(System.IO.Path.Combine(sciezka_z, plik ), System.IO.Path.Combine(sciezka_do, plik ));
}
string[] tablica_plikow= Directory.GetFiles(sciezka_z);

Wymyśliłem także, aby wczytać całą tablice do pliku TXT i potem odczytywać linia po linii i to tak przenosić.
łopatologicznie wiem jak to zrobić. Wystarczy wziąć 50 plików , przenieść do folderu i wziąć kolejne itd. Nie wiem jednak jak zrobić taki licznik, który się zresetuje po tych 50 przejściach (pętla for mi przychodzi na myśl) i potem zacznie od kolejnych indeksów. Nie wiem w ogóle, czy myślę w dobrym kierunku.

Dziękuję za pomoc i wyjaśnienia.

pozdrawiam

1

Polecam zapoznać się z klasami DirectoryInfo oraz FileInfo. Zapewne sporo ułatwi pracę.

DirectoryInfo dir = new DirectoryInfo("ŚCIEŻKA_PODANA_PRZEZ_USERA");
FileInfo[] files = dir.GetFiles();

foreach(FileInfo file in files)
{
    file.MoveTo("");
}
1

A ja bym użył po prostu pętli for.

1

Czemu chcesz zapisywać do txt? Czy to ma działać też na dodanych po sortowaniu plikach? Tzn uruchamiam rozdzielanie, wrzucam do inputu kilka nowych plików, uruchamiam rozdzielanie jeszcze raz, i tylko nowe pliki ma mi teraz przenosić? Jeśli nie, to raczej nie warto zapisywać do txt ani przechowywać tych danych. Takie coś na szybko:

        static void Main(string[] args) {

            string inputPath = "in";
            string outputPath = "out";
            int counterMax = 3;

            string[] allInputFiles = System.IO.Directory.GetFiles(inputPath, "*", System.IO.SearchOption.AllDirectories);
            string currentOutputPath = GenerateNewOutputDirectory(outputPath);
            int counter = 0;

            for(int i = 0; i < allInputFiles.Length; i++) {
                string filename = new System.IO.FileInfo(allInputFiles[i]).Name;
                System.IO.File.Copy(allInputFiles[i], currentOutputPath + filename);
                counter++;
                if (counter >= counterMax) {
                    counter = 0;
                    currentOutputPath = GenerateNewOutputDirectory(outputPath);
                }
            }
        }

        static string GenerateNewOutputDirectory(string outputPath) {
            string currentOutputPath = outputPath + "/" + Guid.NewGuid() + "/";
            System.IO.Directory.CreateDirectory(currentOutputPath);
            return currentOutputPath;
        }

1 użytkowników online, w tym zalogowanych: 0, gości: 1