2013-03-28 2 views
0

У меня есть сценарий Powershell, в котором я сбросил немного кода на C#. Код выполняет поиск в регулярном выражении файла, и если он находит совпадение, он записывает его в datatable, который возвращается в Powershell для дальнейшей обработки. Все работало нормально, пока я не добавил запись в StreamWriter. Как только я это сделаю, сценарий полностью бомбит. Вот фрагмент кода. Я отметил строку, которая взорвала скрипт. Любая идея, почему это может происходить здесь? Если я прокомментирую эту строку, скрипт отлично работает.C# в Powershell StreamWriter

Regex reg = new Regex(regex); 
using (StreamReader r = new StreamReader(SFile)) 
{ 
    string revisedfile = FileName.txt 
    string line;     
    while ((line = r.ReadLine()) != null) 
    { 
     using (StreamWriter writer = new StreamWriter(revisedfile, true)) 
     {       
      // Try to match each line against the Regex. 
      Match m = reg.Match(line); 
      if (m.Success) 
      { 
       DateTime result; 
       if (!(DateTime.TryParse(m.Groups[0].Value, out result))) 
       { 
        // add it to the DT        
        MatchTable.Rows.Add(x, m.Groups[0].Value, line); 

        // write it to the "revised" file 
        writer.WriteLine(reg.Replace(line, match => DateTime.Now.ToString("MM-dd-yyyy"))); // this is the line that blows it up 
       } 
+1

Можете ли вы определить «бомбу»? Отображается ли конкретное сообщение об ошибке? – Icemanind

+0

Если я запускаю код в Visual Studio, код запускается без ошибок. Если я запустил код в Powershell, ничего не произойдет. ISE немедленно возвращает «Complete», и файлы выходных журналов не создаются. – mack

ответ

1

Идти в эту же проблему сегодня. . StreamWriter не использует текущий каталог, который находится в Powershell По умолчанию StreamWriter создает файл в каталоге, возвращенного этой команды:

[IO.Directory]::GetCurrentDirectory() 

Это вернет каталог, который был открыт PowerShell для, а не каталог, сценарий запущен. Лучший способ получить эту работу, как я использовал, чтобы поместить это в первой строке сценария:

[IO.Directory]::SetCurrentDirectory($pwd) 

Это направит выход StreamWriter файл в текущей рабочей директории. Вы можете заменить $ pwd на любой другой каталог, который вы хотите, но помните, если это относительный каталог, файл будет помещен в этот каталог относительно каталога, возвращаемого getcurrentdirectory.

PHEW!

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