0

我有一个 Powershell 脚本,其中删除了一些 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
                }
4

1 回答 1

1

今天遇到了同样的问题。StreamWriter 不使用 powershell 所在的当前目录。默认情况下,StreamWriter 在此命令返回的目录中创建文件:

[IO.Directory]::GetCurrentDirectory()

这将返回打开 powershell 的目录,而不是运行脚本的目录。让它工作的最好方法,我使用的方法,是把它作为脚本的第一行:

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

这会将流写入器文件输出定向到当前工作目录。您可以将 $pwd 替换为您希望的任何其他目录,但请记住,如果它是一个相对目录,则该文件将放置在相对于 getcurrentdirectory 返回的目录的该目录中。

呸!

于 2013-04-17T18:36:38.407 回答