版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a5nan/article/details/85322790
C#调用命令行
//开关/c表示执行完命令就退出
System.Diagnostics.Process cmd = System.Diagnostics.Process.Start("CMD.exe", @"/c systeminfo >test.txt");
cmd.WaitForExit();
System.Diagnostics.Process.Start("CMD.exe", @"/c rd c:\test1 /s /q");
每个System.Diagnostics.Process.Start开启一个新的进程运行指定的程序,所以多个System.Diagnostics.Process.Start语句将进程启动后,命令执行的先后顺序我们无法把握。
上面使用cmd.WaitForExit();,确保第一个命令执行完毕之后再执行第二个。
C#读写txt文件的两种方法介绍
添加命名空间
System.IO;
System.Text;
文件的读取
- 使用FileStream类进行文件的读取,并将它转换成char数组,然后输出。
byte[] byData = new byte[100];
char[] charData = new char[1000];
public void Read()
{
try
{
FileStream file = new FileStream("test.txt", FileMode.Open);
file.Seek(0, SeekOrigin.Begin);
//byData传进来的字节数组,用以接受FileStream对象中的数据,第2个参数是字节数组中开始写入数据的位置,它通常是0,表示从数组的开端文件中向数组写数据,最后一个参数规定从文件读多少字符.
file.Read(byData, 0, 100);
Decoder d = Encoding.Default.GetDecoder();
d.GetChars(byData, 0, byData.Length, charData, 0);
Console.WriteLine(charData);
file.Close();
}
catch (IOException e)
{
Console.WriteLine(e.ToString());
}
}
- 使用StreamReader读取文件,然后一行一行的输出。
public void Read(string path)
{
StreamReader sr = new StreamReader(path,Encoding.Default);
String line;
while ((line = sr.ReadLine()) != null)
{
Console.WriteLine(line.ToString());
}
}
文件的写入
- 使用FileStream类创建文件,然后将数据写入到文件里。
public void Write()
{
FileStream fs = new FileStream("E:\\ak.txt", FileMode.Create);
//获得字节数组
byte[] data = System.Text.Encoding.Default.GetBytes("Hello World!");
//开始写入
fs.Write(data, 0, data.Length);
//清空缓冲区、关闭流
fs.Flush();
fs.Close();
}
- 使用FileStream类创建文件,使用StreamWriter类,将数据写入到文件。
public void Write(string path)
{
FileStream fs = new FileStream(path, FileMode.Create);
StreamWriter sw = new StreamWriter(fs);
//开始写入
sw.Write("Hello World!!!!");
//清空缓冲区
sw.Flush();
//关闭流
sw.Close();
fs.Close();
}
以上就完成了,txt文本文档的数据读取与写入。
C#获取某个指定进程并将它杀死
我们以杀死QQ的进程为例
//获取当前运行着的进程列表中的QQ进程
Process[] processes = Process.GetProcessesByName("QQ.exe");
//在进程列表中查找指定的QQ进程
foreach (Process p in processes)
{
//执行kill命令
p.Kill();
//等待被杀死的进程退出
p.WaitForExit();
//跳出foreach循环,可有可无
break;
}
代码其实很简单,就几句,在这个例子里,我们用到了Process这个类,那么就必须引用using System.Diagnostics;这个命名空间,因为Process类在它里面。需要用管理员权限运行。
C#得到物理内存大小和Windows可见内存大小
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Management;
string GetPhysicalMemorySize()
{
//PhysicalMemorySize 可用物理内存大小,与资源管理器中的关于对话框显示的内存大小一致
//FreePhysicalMemory 剩余物理内存大小
ulong PhysicalMemorySize = 0, VirtualMemorySize = 0, FreePhysicalMemory = 0;
ManagementClass osClass = new ManagementClass("Win32_OperatingSystem");
foreach (ManagementObject obj in osClass.GetInstances())
{
if (obj["TotalVisibleMemorySize"] != null)
{
PhysicalMemorySize = (ulong)obj["TotalVisibleMemorySize"];
}
if (obj["TotalVirtualMemorySize"] != null)
{
VirtualMemorySize = (ulong)obj["TotalVirtualMemorySize"];
}
if (obj["FreePhysicalMemory"] != null)
{
FreePhysicalMemory = (ulong)obj["FreePhysicalMemory"];
}
break;
}
if (PhysicalMemorySize > 0)
{
return string.Format("{0:###,###,###} KB", PhysicalMemorySize);
} else {
return "Unknown";
}
}
获取内核数量实现
先在引用中加入 System.Management 参考
再在代码中 using System.Management;
以下是获取CPU属性的代码
// Get the WMI class
ManagementClass c = new ManagementClass(new ManagementPath("Win32_Processor"));
// Get the properties in the class
ManagementObjectCollection moc = c.GetInstances();
// display the properties
foreach (ManagementObject mo in moc)
{
PropertyDataCollection properties = mo.Properties;
//获取内核数代码
Console.WriteLine( "物理内核数:"+ properties["NumberOfCores"].Value);
Console.WriteLine( "逻辑内核数:"+ properties["NumberOfLogicalProcessors"].Value);
//其他属性获取代码
foreach (PropertyData property in properties)
{
richTextBox1.Text += property.Name + ":" + property.Value + "\r";
}
}
C# 调用PowerShell方法
PowerShell应为编写和运行都很方便,所以为了重复利用,经常写了一些小方法或者PS代码片段。使用的时候可能会很难找到自己想要的那个方法,如果要是有一个界面把这些代码管理起来并且调用,那就很爽了
- 创建一个powershell的方法,供C#调用,方法很简单,两个数的加法运算
function Sum
{
param([int]$first, [int]$second)
$result = $first + $second
return $result
}
- 在C#的控制台程序中创建一个私有方法,调用powershell
//首先定义一个powershell存放路径的全局变量
private static string script =File.ReadAllText(@"Path\Sum.ps1");
private static void CallPS1()
{
using (Runspace runspace = RunspaceFactory.CreateRunspace())
{
runspace.Open();
PowerShell ps = PowerShell.Create();
ps.Runspace = runspace;
ps.AddScript(script);
ps.Invoke();
ps.AddCommand("Sum").AddParameters(
new Dictionary<string, int>()
{
{"first", 5},
{"second", 4}
}
);
foreach (PSObject result in ps.Invoke())
{
Console.WriteLine("CallPS1()");
Console.WriteLine(result);
}
}
}
调用方法需要添加一个引用System.Management.Automation.dll
如果找不到可以到这个路径下找到:C:\windows\assembly\GAC_MSIL\System.Management.Automation\1.0.0.0__31bf3856ad364e35\System.Management.Automation.dll