2014-01-10 2 views
-1

Я пробовал, как сделать папку с автоматическим увеличением, но есть проблема при нумерации, кто-нибудь знает, где проблема?Как сделать папку с автоматическим увеличением?

public void NewFolder() 
     { 
      try 
      { 
       string FolderName = Path.Combine(txtOutputFileEn.Text, txtNamaFile.Text); 
       tempFolder = FolderName; 
       if (!Directory.Exists(tempFolder)) 
       { 
        Directory.CreateDirectory(tempFolder); 
       } 
       else if (Directory.Exists(tempFolder)) 
       { 
        tempFolder = tempFolder + ("001"); 
        if (!Directory.Exists(tempFolder)) 
        { 
         Directory.CreateDirectory(tempFolder); 
        } 
        else if (Directory.Exists(tempFolder)) 
        { 
         int x = 1; 
         for (x = 0; x < 50; x++) 
         { 
          string angkaString = tempFolder.Substring(tempFolder.Length - 3); 
          int angka = Convert.ToInt32(angkaString) + x; 
          string angka00 = "00" + angka.ToString(); 
          tempFolder = FolderName + angka00.Substring(angka00.Length - 3); 
          if (!Directory.Exists(tempFolder)) 
          { 
           Directory.CreateDirectory(tempFolder); 
           return; 
          } 
         } 
        } 
       } 
       MessageBox.Show(tempFolder); 
      } 
      catch (IOException ex) 
      { 
       MessageBox.Show(this, ex.Message, Text, MessageBoxButtons.OK, MessageBoxIcon.Error); 
      } 
     } 

Здесь выводится папка имя = folder001, folder002, folder004, folder007, folder11, folder16, folder22.

Я хочу, чтобы сделать имя = folder001, folder002, folder003, folder004 .. следующий

+4

ваш probl em: 'int angka = Convert.ToInt32 (angkaString) + x;' означает '1 + 1 = 2; 2 + 2 = 4; 4 + 3 = 7; 7 + 4 = 11' ... и т. Д. – Bolu

+0

@Bolu Думаю, мне нужно восстановить значение x, добавив x = 1, где код должен меняться? – sloqye

+0

use 'int angka = Convert.ToInt32 (angkaString) + 1;' См. Ответ Shahrooz Jefri ㇱ – Bolu

ответ

2

Вашей проблемы здесь:

    int angka = Convert.ToInt32(angkaString) + x; 

Используйте это:

    int angka = Convert.ToInt32(angkaString) + 1; 
+0

Повторение ответов, которые уже были даны, но гораздо более ясным образом без ненужного повторения остальной части кода. Для ясности определенно +1.:) – Chris

+0

Правильно, это проблема, просто: D. Спасибо – sloqye

+0

Хотя это правильный ответ, пожалуйста, взгляните на решение @Douglas ниже ... Я должен сказать, что написанный вами код довольно запутан и слишком сложный. – Asken

1

Попробуйте это ..

INT angka = Convert.ToInt32 (angkaString) + х; вместо добавления х здесь вы можете добавить непосредственно

public void NewFolder() 
     { 
      try 
      { 
       string FolderName = Path.Combine(txtOutputFileEn.Text, txtNamaFile.Text); 
       tempFolder = FolderName; 
       if (!Directory.Exists(tempFolder)) 
       { 
        Directory.CreateDirectory(tempFolder); 
       } 
       else if (Directory.Exists(tempFolder)) 
       { 
        tempFolder = tempFolder + ("001"); 
        if (!Directory.Exists(tempFolder)) 
        { 
         Directory.CreateDirectory(tempFolder); 
        } 
        else if (Directory.Exists(tempFolder)) 
        { 
         int x = 1; 
         for (x = 0; x < 50; x++) 
         { 
          string angkaString = tempFolder.Substring(tempFolder.Length - 3); 
          int angka = Convert.ToInt32(angkaString) + 1; 
          string angka00 = "00" + angka.ToString(); 
          tempFolder = FolderName + angka00.Substring(angka00.Length - 3); 
          if (!Directory.Exists(tempFolder)) 
          { 
           Directory.CreateDirectory(tempFolder); 
           return; 
          } 
         } 
        } 
       } 
       MessageBox.Show(tempFolder); 
      } 
      catch (IOException ex) 
      { 
       MessageBox.Show(this, ex.Message, Text, MessageBoxButtons.OK, MessageBoxIcon.Error); 
      } 
     } 
-2

Вы стиль код не очень понятно. Вы должны использовать хорошие имена для ваших методов, переменных и т. Д. Именование очень важно.

Хорошим решением является использование форматирования строк, предоставляемого методом .ToString(). я устроился и упрощен код:

public void NewFolder() 
    { 
     try 
     { 
      string folderName = Path.Combine(txtOutputFileEn.Text, txtNamaFile.Text); 

      if (!Directory.Exists(folderName)) 
      { 
       Directory.CreateDirectory(folderName); 
      } 
      else 
      { 
       // Creates 50 folder from 001 up to 050 
       // This works also if we have folders from 001 up 022 allready. It will extend up to 050 
       for (int i = 1; i <= 50; i++) 
       { 
        // formatting the string for 3 digits like 001, 002 and so on. 
        string angka00 = i.ToString("D3"); 

        var folderWithNumber = folderName + angka00; 
        if (!Directory.Exists(folderWithNumber)) 
        { 
         Directory.CreateDirectory(folderWithNumber); 
        } 
       } 

      } 
     } 
     catch (IOException ex) 
     { 
      MessageBox.Show(this, ex.Message, Text, MessageBoxButtons.OK, MessageBoxIcon.Error); 
     } 
    } 
+3

Что? Код переформатирования никогда не исправляет ошибки ... Я не буду сравнивать ваш код по строкам, но если вы ожидаете, что это устранит проблему, я уверен, что решение должно быть больше, чем использовать форматирование ... (и в взгляд выглядит так, как будто он все еще там ... – Chris

+0

Речь идет не о форматировании кода. Он собирается использовать метод ToString() для форматирования вывода преобразования int в строку. –

+0

У вас есть тонна кодов, которые вы указали. На самом деле вы должны четко указать свое решение (как у вас сейчас), а не ожидать, что люди сделают линейное сравнение вашего кода, чтобы найти, что такое ваше исправление. я до сих пор не понимаю, почему вы думаете, что это исправит. Если 'angka' будет проходить через 4 вместо 3, то я уверен, что' ToString' вам не поможет. Не стесняйтесь объяснять, почему я неправильно, но. – Chris

2

Я очищенный свой код, чтобы получить функциональность вы после:

public void NewFolder() 
{ 
    try 
    { 
     string folderName = Path.Combine(txtOutputFileEn.Text, txtNamaFile.Text); 
     if (!Directory.Exists(folderName)) 
     { 
      Directory.CreateDirectory(folderName); 
     } 
     else 
     { 
      for (int x = 1; x < 50; x++) 
      { 
       string tempFolder = folderName + x.ToString().PadLeft(3, '0'); 
       if (!Directory.Exists(tempFolder)) 
       { 
        Directory.CreateDirectory(tempFolder); 
        MessageBox.Show(tempFolder); 
        break; 
       } 
      } 
     } 
    } 
    catch (IOException ex) 
    { 
     MessageBox.Show(this, ex.Message, Text, MessageBoxButtons.OK, MessageBoxIcon.Error); 
    } 
} 
+0

@ Крис: Ты прав; исправлено. – Douglas

+1

+1. Вы единственный, кто решил переработать алгоритм. –

+1

Этот код упрощен. Спасибо. Я попробую: D – sloqye

Смежные вопросы