2014-01-21 2 views
1

Когда моя программа запускается, я хочу, чтобы она создала папку в правой папке страны. Если ошибка из страны 1, ее следует поместить в эту папку. Теперь он создает только новые папки в одном и том же пути, а не в путь «Country1».Папка внутри правой папки, C#

  • Пример:
  • Как сейчас: C: \ стране1 Отказ 2014-1-21
  • Как должно быть: C: \ стране1 \ стране1 Отказ 2014-1-21

Что я делаю неправильно?

#region Failure Folder Creation 
     string failureDir = string.Empty; 
     failureDir = AppDomain.CurrentDomain.BaseDirectory + "Source\\"; 
     try 
     { 

      string failureDirToday = string.Empty; 
      if (metaDataXmlPath.Contains("Country1")) 
       failureDir = failureDir + "\\Country1 Failure"; 
      else if (metaDataXmlPath.Contains("Country2")) 
       failureDir = "\\Country2 Failure"; 
      else if (metaDataXmlPath.Contains("Country3")) 
       failureDir = "\\Country3 Failure"; 
      failureDirToday = failureDir + " " + todayMoveDate; 

      if (!Directory.Exists(failureDir)) 
       Directory.CreateDirectory(failureDir); 

      if (!Directory.Exists(failureDirToday)) 
       Directory.CreateDirectory(failureDirToday); 
     } 
+1

Вы можете просто войти/отладки 'failureDir' varible перед любыми операциями с файлами? Если это не то, что вы ожидали, узнайте, что не так – astef

+1

Лучшей практикой является использование 'System.IO.Path.Combine (failDir,« Country1 Failure »)', а не 'failureDir +" \\ Country1 Failure ";' –

+0

Это просто добавила папку 2014-1-21 в основную структуру. – Lebowski

ответ

1

Я не вижу, чтобы вы создали подпапку Country1.

Я бы просто изменить

if (metaDataXmlPath.Contains("Country1")) 
    failureDir = failureDir + "\\Country1 Failure"; 

в

if (metaDataXmlPath.Contains("Country1")) 
    failureDir = failureDir + "Country1\\Country1 Failure"; 

(Это только самое простое решение. При работе с путями, я бы прилипают к статическому path.combine() -метод вместо строки конкатенации.)


Давайте рассмотрим ваш код и посмотрим, что произойдет s:

failureDir = AppDomain.CurrentDomain.BaseDirectory + "Source\\"; 

failureDir теперь C:\Source.

Мы полагаем, что код выполняется в первую очередь, если ветви:

failureDir = failureDir + "\\Country1 Failure"; 

failureDir теперь C:\Source\Country1 Failure

После всех if-вернулись на Родину Theres один заключительное заявление:

failureDirToday = failureDir + " " + todayMoveDate; 

Так failureDirToday есть C:\Source\Country1 Failure 2014-1-21. Это тот же результат, что и вы, и, как я сказал в начале: вы просто не создаете вложенную папку с именем Country1.

+0

Спасибо за отличную помощь и объяснение моей головокружения в кодировании. Его приближение, но теперь это добавление двух папок: Country1 Failure AND Country1 Failure 2014-1-21 в папку с главной папкой Country 1 .. ха-ха. Мне нужен только последний, а потом все хорошо :) – Lebowski

+0

@Lebowski Тогда вам нужно удалить 'Directory.CreateDirectory (failureDir);' поскольку это тот, который создает папку без даты. –

0
  1. Не уверен, что вы пытаетесь достичь с помощью вызова AppDomain.CurrentDomain.BaseDirectory. это вернет папку, из которой запускается приложение, а не C: или любую другую корневую папку. Я также не понимаю, почему вы прикрепляете к нему источник, но, возможно, это часть того, что вы хотели сделать.

  2. Вы должны использовать Path.Combine, чтобы объединить имена папок и создать иерархию. В вашем примере вы создаете две разные папки: одну и одну без даты. Что вы должны сделать вместо этого, что-то вроде

    if(metaDataXmlPath.Contains("Country1")) 
    { 
        string errorSourceName = "Country1"; 
        failureDir = Path.Combine(Path.Combine(failureDir, errorSourceName), String.Format("{0} {1}", errorSourceName, todayMoveDate)); 
    } 
    

    и теперь вы можете создать failureDirтолько, и это создаст всю иерархию.

    Я добавляю пример кода, как ваш код должен выглядеть после изменения

    string failureDir = string.Empty; 
    failureDir = AppDomain.CurrentDomain.BaseDirectory + "Source\\"; 
    try 
    { 
    
        string failureDirToday = string.Empty; 
        if(metaDataXmlPath.Contains("Country1")) 
        { 
         string errorSourceName = "Country1"; 
         failureDir = Path.Combine(Path.Combine(failureDir, errorSourceName), String.Format("{0} {1}", errorSourceName, todayMoveDate)); 
        } 
        else if (metaDataXmlPath.Contains("Country2")) 
        { 
         string errorSourceName = "Country2"; 
         failureDir = Path.Combine(Path.Combine(failureDir, errorSourceName), String.Format("{0} {1}", errorSourceName, todayMoveDate)); 
        } 
        else if (metaDataXmlPath.Contains("Country3")) 
        { 
         string errorSourceName = "Country3"; 
         failureDir = Path.Combine(Path.Combine(failureDir, errorSourceName), String.Format("{0} {1}", errorSourceName, todayMoveDate)); 
        } 
        // Notice the eliminated line here 
    
        // This is where we actually create the folder 
        if (!Directory.Exists(failureDir)) 
         Directory.CreateDirectory(failureDir); 
    
        // Notice the eliminated line here 
    } 
    
+0

Этот код создал две подпапки внутри Country1. Danmark Failure 2014-1-21 И отказ Danmark 2014-1-21 2014-1-21 – Lebowski

+0

См. Мое редактирование. и удалите папки из исходного каталога, прежде чем запускать код. –

+0

Это получилось отлично, осталось только один вопрос: если я запустил это завтра, добавит ли он Cuntry1 Failure 2014-1-22 в папку Country1? – Lebowski

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