C# 从Powershell写入一个文件,然后从C读取#
我从C#调用Powershell来收集一些信息,并使用Out文件将其发送到文本文件。然后,我需要读取上述文件中的行,并处理C#中的数据 所以当它试图打开文本文件时,我得到一个 “找不到文件”C# 从Powershell写入一个文件,然后从C读取#,c#,file,powershell,C#,File,Powershell,我从C#调用Powershell来收集一些信息,并使用Out文件将其发送到文本文件。然后,我需要读取上述文件中的行,并处理C#中的数据 所以当它试图打开文本文件时,我得到一个 “找不到文件” 例外。文件每次都被写入,因此我假设有一个定时事件,这就是我使用WaitForExit的原因。但是它仍然无法“找到”文件。为什么不用C#而不是PowerShell编写文件 您可以利用Diagnostics.Process.NET类(这里是一个PowerShell示例) 为什么不用C#而不是PowerShell
例外。文件每次都被写入,因此我假设有一个定时事件,这就是我使用
WaitForExit
的原因。但是它仍然无法“找到”文件。为什么不用C#而不是PowerShell编写文件
您可以利用Diagnostics.Process.NET类(这里是一个PowerShell示例)
为什么不用C#而不是PowerShell来编写文件 您可以利用Diagnostics.Process.NET类(这里是一个PowerShell示例)
我不能告诉你出了什么问题,但我可以给你一些解决问题的技巧
if (File.Exists(@"C:\Myfile.txt"))
{
... file process code here....
}
if (File.Exists(filename))
{
...process the file.
}
这样做的好处是,您可以100%保证在所有位置使用完全相同的文件名
约翰我不能告诉你出了什么问题,但我可以给你一些解决问题的建议
if (File.Exists(@"C:\Myfile.txt"))
{
... file process code here....
}
if (File.Exists(filename))
{
...process the file.
}
这样做的好处是,您可以100%保证在所有位置使用完全相同的文件名
您确定您有
C:
的写入权限并且文件已写入吗?由于直接写入C:
时引发的UnauthorizedAccessException
,我对此表示怀疑。使用MyProcInfo.UseShellExecute=false;MyProcInfo.RedirectStandardOutput=true,然后将该输出重定向到字符串
,查看问题所在<代码>而(!MyProcess.StandardOutput.EndOfStream)包含MyProcess.StandardOutput.ReadLine()代码>应该可以。请注意:Powershell端正在工作。文件确实会被写入…实际上每次测试时我都会手动删除它。所以我确实有C:\的写权限。当我访问File.ReadLines时遇到问题。那是我得到文件的时候Found@wOxxOm如果您不打算进行替换,那么实际上应该使用单引号字符串文字。我同意@Janesabouchleich。您的代码给了我相同的异常,除非我写入/读取子目录(C:\temp\MyFile.txt)。你说文件已经被写入了,但我对此表示怀疑,因为你的代码除了文件路径之外,对我来说是正常工作的。你是否检查了C:\并看到文件确实存在?Windows会自动重新定向文件夹,您的C:\write可能已重定向到%localappdata%\VirtualStore
。如果从资源管理器查看时文件在那里,那么该文件的文件权限是什么?您确定您有C:
的写入权限并且该文件已写入吗?由于直接写入C:
时引发的UnauthorizedAccessException
,我对此表示怀疑。使用MyProcInfo.UseShellExecute=false;MyProcInfo.RedirectStandardOutput=true
,然后将该输出重定向到字符串
,查看问题所在<代码>而(!MyProcess.StandardOutput.EndOfStream)包含MyProcess.StandardOutput.ReadLine()代码>应该可以。请注意:Powershell端正在工作。文件确实会被写入…实际上每次测试时我都会手动删除它。所以我确实有C:\的写权限。当我访问File.ReadLines时遇到问题。那是我得到文件的时候Found@wOxxOm如果您不打算进行替换,那么实际上应该使用单引号字符串文字。我同意@Janesabouchleich。您的代码给了我相同的异常,除非我写入/读取子目录(C:\temp\MyFile.txt)。你说文件会被写下来,但我怀疑是因为
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string MyCommand = "-Command &{ if (!(Test-Path 'c:\\test')) {md 'c:\\test'; get-process | Out-File c:\\test\\MyFile.txt}}";
ProcessStartInfo MyProcInfo = new ProcessStartInfo();
MyProcInfo.FileName = "powershell.exe";
MyProcInfo.Arguments = MyCommand;
Process MyProcess = new Process();
MyProcess.StartInfo = MyProcInfo;
MyProcess.Start();
MyProcess.WaitForExit();
try
{
var lines = File.ReadLines(@"c:\test\MyFile.txt");
foreach (var ln in lines) {
Console.WriteLine(ln);
Console.ReadKey();
}
}
catch (Exception Ex)
{
Console.WriteLine(Ex.ToString());
Console.ReadKey();
}
}