Member 8010354 Ответов: 0

Как автоматически проверить существующую папку и продолжить работу дальше


Привет Команда,

Я разработал приложение для windows, где оно должно копировать файлы из входного местоположения в выходное местоположение в правильной структуре папок

EXAMPLE: In SOURCE, files will be placed in multiple folders as shown below:

C:\\users\A\B\010\100 Files
C:\\users\A\B\011\100 Files
C:\\users\A\B\012\100 Files

But in DESTINATION, files are copying as per below folder structure as shown below which is good and required in the same way only:

D:\\users\Y\Z\001\25 Files
D:\\users\Y\Z\002\25 Files
D:\\users\Y\Z\003\25 Files


Но если пользователь открывает другой экземпляр или пытается скопировать другой набор данных в ту же выходную папку (в которой уже есть папки 003), он должен начать с папки 004, проверив предыдущие папки, но он снова копируется только как папка 001

Как я могу заставить код работать, чтобы проверить номер папки и инкремент.

НАЖМИТЕ КНОПКУ КОПИРОВАТЬ КОД:

  if (!int.TryParse(textBox3.Text, out int thresholdValue) || thresholdValue < 1)
            {
                // TODO: Display an error message to the user
                return;
            }

            string source = textBox1.Text;
            string destination = textBox2.Text;
            int totalFileCount = 0;
            int currentSubFolder = 0;
            int remainingFileCount = 0;
            string destinationFolder = null;

            ISet<string> extensions = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
{
    ".tif",
    ".tiff",
    ".jpg",
    ".jpeg"
};

            IEnumerable<string> files = Directory
                .EnumerateFiles(source, "*", SearchOption.AllDirectories)
                .Where(f => extensions.Contains(Path.GetExtension(f)));

            foreach (string sourceFile in files)
            {
                if (remainingFileCount == 0)
                {
                    // First file, or the sub-folder is full:
                    currentSubFolder++;
                    destinationFolder = Path.Combine(destination, currentSubFolder.ToString("D3"));
                    if (!Directory.Exists(destinationFolder)) Directory.CreateDirectory(destinationFolder);
                    remainingFileCount = thresholdValue;
                }

                string destinationFile = Path.Combine(destinationFolder, Path.GetFileName(sourceFile));
                File.Copy(sourceFile, destinationFile);
                totalFileCount++;
                remainingFileCount--;   
            }

            MessageBox.Show("All " + totalFileCount + " files are copied");


Что я уже пробовал:

я пробовал использовать это условие, но оно совсем не работает

BillWoodruff

вы хотите сказать, что хотите обработать каждый из 3 каталогов, каждый из которых имеет 100 файлов ? как выбрать 25 из 100 файлов ?

мы не можем читать твои мысли :)

Member 8010354

Нет, я хочу сказать, что когда я пытался скопировать файлы из исходного местоположения в целевое, они должны копироваться в правильной структуре папок (как показано ниже)

001 - > 1000 файлов (количество копируемых файлов является динамическим путем предоставления определенного пользователем значения, которое уже закодировано)
002 - > 1000 файлов
003 - > 1000 файлов

ДО СИХ ПОР ЭТО РАБОТАЕТ

если я попытаюсь скопировать файлы в то же место (те же файлы или тот же исходный путь или что-то еще), он снова создаст папку из 001, вместо этого он должен проверить номер папки, который уже существовал, и увеличить его
согласно нашему приведенному выше примеру, он должен создать папку 004 и снова начать копирование вместо 001.

Richard MacCutchan

Сначала вам нужно проверить, какие папки уже существуют на самом низком уровне назначения. Так что если это папки "001", "002", "003", затем вам нужно установить идентификатор папки на последнее значение плюс 1.

Gerry Schmitz

Я не вижу причин, почему бы вам просто не использовать те же имена, что и "источник" (основываясь на том, что вы сказали до сих пор). Учитывая всю эту "путаницу", может быть, просто сделайте "переименование", когда вы закончите делать то, что вы думаете, что делаете.

0 Ответов