/*System.IO 命名空间包含允许读写文件和数据流的类型以及提供基本文件和目录支持的类型。
*在这个命中空间里,最常用的只有2个类:File类和Directory类。
*File类,提供用于创建、复制、删除、移动和打开文件的静态方法,并协助创建 FileStream 对象。
*Directory类,公开用于创建、移动和枚举通过目录和子目录的静态方法。
*下面的这些程序展示了它们最常见的用法。
*/
using System;
using System.IO;
namespace SystemIO
{
class AppEnter
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
//
///下面这些函数尝试使用System.IO.File类的静态方法
///创建、拷贝、删除、移动、打开文件以及向文件追加文本
//TestFile.CreateFile();
//System.Console.ReadLine();
//TestFile.CopyFile();
//System.Console.ReadLine();
//TestFile.DeleteFile();
//System.Console.ReadLine();
//TestFile.MoveFile();
//System.Console.ReadLine();
//TestFile.OpenFile();
//System.Console.ReadLine();
//TestFile.AppendText();
//System.Console.ReadLine();
///
///下面这些函数尝试使用System.IO.Directory类的静态方法
///创建、移动、删除以及枚举目录和子目录
//TestDirectory.CreateDir();
//System.Console.ReadLine();
//TestDirectory.MoveDir();
//System.Console.ReadLine();
//TestDirectory.DeleteDir();
//System.Console.ReadLine();
//TestDirectory.dir();
//System.Console.ReadLine();
//TestDirectory.dirFile();
//System.Console.ReadLine();
}
}
class TestFile
{
/// <summary>
/// 创建文件
/// </summary>
public static void CreateFile()
{
System.Console.WriteLine("CreateFile()");
//文件的路径
string path = @"E:/TestFile/MyTest.txt";
//如果文件已经存在就删除
if(File.Exists(path))
{
File.Delete(path);
}
/*using 语句定义一个范围,在此范围的末尾将处理对象。
* using (expression type identifier = initializer) statement 其中:
* expression 希望在退出 using 语句时调用 Dispose 的表达式。
* 也就是说在using语句结束时会调用fs的Dispose方法
* */
//创建文件
using(FileStream fs = File.Create(path, 1024))
{
//Byte数组,给一个unicode
Byte[] info = new System.Text.UTF8Encoding(true).GetBytes("This is some text in the file./n");
//向文件添加一些信息
fs.Write(info, 0, info.Length);
}
//读入文件并显示
using(StreamReader sr = File.OpenText(path))
{
string s = "";
while((s = sr.ReadLine()) != null)
{
System.Console.WriteLine(s);
}
}
}
/// <summary>
/// 拷贝文件
/// </summary>
public static void CopyFile()
{
System.Console.WriteLine("CopyFile()");
string path = @"E:/TestFile/MyTest.txt";
string path2 = path + "temp";
System.Console.WriteLine(path2);
try
{
//创建文件
//using (FileStream fs = File.Create(path)) {}
TestFile.CreateFile();
//确保目标不存在
File.Delete(path2);
//拷贝文件
File.Copy(path, path2);
Console.WriteLine("{0} copied to {1}", path, path2);
//重新拷贝同一个文件,仍然应该成功
File.Copy(path, path2, true);
Console.WriteLine("The second Copy operation succeeded, which was expected.");
}
catch
{
Console.WriteLine("Double copy is not allowed, which was not expected.");
}
}
/// <summary>
/// 删除文件
/// </summary>
public static void DeleteFile()
{
System.Console.WriteLine("DeleteFile()");
string path = @"E:/TestFile/MyTest.txt";
try
{
//删除文件
File.Delete(path);
Console.WriteLine("{0} was successfully deleted.", path);
}
catch (Exception e)
{
Console.WriteLine("The process failed: {0}", e.ToString());
}
}
/// <summary>
/// 移动文件
/// </summary>
public static void MoveFile()
{
string file = "MyTest.txt";
string path = @"E:/TestFile";
string path2 = path + @"/temp";
string file2 = path2 + "//" + file;
file = path + "//" + file;
try
{
// Move the file.
File.Move(file, file2);
Console.WriteLine("{0} was moved to {1}.", file, file2);
}
catch (Exception e)
{
Console.WriteLine("The process failed: {0}", e.ToString());
}
}
/// <summary>
/// 打开文件
/// </summary>
public static void OpenFile()
{
string path = @"E:/TestFile/MyTest.txt";
//打开流并读回来
using(FileStream fs = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.None))
{
byte[] b = new byte[1024];
System.Text.UTF8Encoding temp = new System.Text.UTF8Encoding(true);
while(fs.Read(b, 0, b.Length) > 0)
{
Console.WriteLine(temp.GetString(b));
}
try
{
//得到同一个文件,一定会发生异常,因为第一次打开该文件是不分享的
using(FileStream fs2 = File.Open(path, FileMode.Open))
{
}
}
catch(Exception e)
{
Console.Write("Opening the file twice is disallowed.");
Console.WriteLine(", as expected: {0}", e.ToString());
}
}
}
/// <summary>
/// 将文本追加到文件
/// </summary>
public static void AppendText()
{
string path = @"E:/TestFile/MyTest.txt";
//如果文件不存在,就创建一个文件,并写入文本
if (!File.Exists(path))
{
//创建文件,并写入文本
using (StreamWriter sw = File.CreateText(path))
{
sw.WriteLine("Hello");
sw.WriteLine("And");
sw.WriteLine("Welcome");
}
}
//向文件里边写如文本
using (StreamWriter sw = File.AppendText(path))
{
sw.WriteLine("This");
sw.WriteLine("is Extra");
sw.WriteLine("Text");
}
//打开文件,读取文本,显示到控制台窗体
using (StreamReader sr = File.OpenText(path))
{
string s = "";
while ((s = sr.ReadLine()) != null)
{
Console.WriteLine(s);
}
}
}
}
class TestDirectory
{
/// <summary>
/// 创建目录
/// </summary>
public static void CreateDir()
{
//指定目录
string path = @"e:/MyDir";
try
{
//确定目录是否已经存在
if (Directory.Exists(path))
{
Console.WriteLine("That path exists already.");
return;
}
//创建目录
DirectoryInfo di = Directory.CreateDirectory(path);
Console.WriteLine("The directory was created successfully at {0}.",
Directory.GetCreationTime(path));
}
catch (Exception e)
{
Console.WriteLine("The process failed: {0}", e.ToString());
}
}
/// <summary>
/// 移动目录
/// </summary>
public static void MoveDir()
{
string sPath = @"e:/MyDir";
string dPath = @"e:/TestFile/MyDir";
if(!Directory.Exists(sPath))
{
return;
}
if(Directory.Exists(dPath))
{
return;
}
Directory.Move(sPath, dPath);
}
/// <summary>
/// 删除目录
/// </summary>
public static void DeleteDir()
{
string path = @"e:/MyDir";
if(Directory.Exists(path))
{
Directory.Delete(path, true);
}
else
{
System.Console.WriteLine("目录不存在。哈哈!");
}
}
/// <summary>
/// 查看目录下的子目录
/// </summary>
public static void dir()
{
string[] dirs = Directory.GetDirectories(@"e:/TestFile");
//Console.WriteLine("The number of directories starting with p is {0}.", dirs.Length);
foreach(string dir in dirs)
{
Console.WriteLine(dir);
}
}
/// <summary>
/// 查看目录下的文件
/// </summary>
public static void dirFile()
{
DirectoryInfo di = new DirectoryInfo(Environment.CurrentDirectory);
FileInfo[] fi = di.GetFiles();
Console.WriteLine("The following files exist in the current directory:");
foreach (FileInfo fiTemp in fi)
Console.WriteLine(fiTemp.Name);
}
}
}