C#部分笔记

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;

文件的读取

  1. 使用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());
            }
        }
  1. 使用StreamReader读取文件,然后一行一行的输出。
    public void Read(string path)
	{
		StreamReader sr = new StreamReader(path,Encoding.Default);
		String line;
		while ((line = sr.ReadLine()) != null)
		{
			Console.WriteLine(line.ToString());
		}
	}

文件的写入

  1. 使用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();
        }
  1. 使用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代码片段。使用的时候可能会很难找到自己想要的那个方法,如果要是有一个界面把这些代码管理起来并且调用,那就很爽了

  1. 创建一个powershell的方法,供C#调用,方法很简单,两个数的加法运算
function Sum
{
	param([int]$first, [int]$second)
	$result = $first + $second
	return $result
}
  1. 在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

猜你喜欢

转载自blog.csdn.net/a5nan/article/details/85322790
今日推荐