.net文件流操作

		//using System.IO;
                //using System.IO.Compression;
                private void button1_Click(object sender, EventArgs e)
		{
			Txt txt = new Txt();
			txt.title = textBox1.Text;
			txt.detail = textBox2.Text;

			//創建存儲的文件流
			BinaryFormatter bf = new BinaryFormatter();
			using (FileStream fsWrite = new FileStream("txt.bin", FileMode.Create)) {
				bf.Serialize(fsWrite, txt);
			}

			BinaryFormatter binary = new BinaryFormatter();
			//創建讀取文件的文件流
			using (FileStream fsRead = new FileStream("txt.bin", FileMode.Open))
			{
				//執行反序列化
				object obj = binary.Deserialize(fsRead);
				Txt pr = obj as Txt;
				//listBox1.Items.Add(pr.title);

			}

			//文件流的使用方式
			string msg = "";
			//將字符串轉換成數組
			byte[] bytes = System.Text.Encoding.UTF8.GetBytes(msg);
			//把一個byte數組轉換爲一個字符串
			string newmsg = System.Text.Encoding.UTF8.GetString(bytes);
			//流操作的是字節,不能直接操作字符串


			//通過fileStream來寫文件
			//文件流的使用步驟
			FileStream fsWriteStream = new FileStream("first.txt", FileMode.Create, FileAccess.Write);
			//使用文件流,執行讀寫操作
			string msg2 = "sadkjfkjsaflkjas,三角閥";
			byte[] byts = System.Text.Encoding.UTF8.GetBytes(msg2);
			//寫
			//參數1:將指定的字節數組中的內容寫入到文件
			//參數2:參數1數組的偏移量,一般爲0
			//參數3:本次文件寫入操作要寫入的字節數
			fsWriteStream.Write(byts, 0, byts.Length);
			//清空緩衝區,關閉文件流,釋放資源
			fsWriteStream.Flush();
			fsWriteStream.Close();
			fsWriteStream.Dispose();



			//通過filestream來讀文件
			using (FileStream fsRead = new FileStream("first.txt",FileMode.Open,FileAccess.Read))
			{
				//使用FileStream文件流讀取文本文件的時候,不需要指定編碼,因爲編碼實在將byte數組轉換
				//爲字符串的時候才需要使用編碼。而這裏是直接讀取byte[],所以無需使用編碼
				byte[] bytes1 = new byte[fsRead.Length];

				fsRead.Read(bytes1,0,bytes1.Length);
				//將byte轉換字符串
				string msg3 = System.Text.Encoding.UTF8.GetString(bytes1);
			}


			//大文件拷貝
			string source = @"c:\";
			string target = @"d:\";
			BigFileCopy(source,target);


		}
		/// <summary>
		/// 通過文件流實現將source拷貝到target中
		/// </summary>
		/// <param name="source"></param>
		/// <param name="target"></param>
		private static void BigFileCopy(string source,string target) {
			//創建一個讀取源文件的文件流
			using (FileStream fsRead = new FileStream(source,FileMode.Open,FileAccess.Read)) {
				//創建一個寫入源文件的文件流
				using (FileStream fsWrite = new FileStream(target,FileMode.Create,FileAccess.Write)) {
					//拷貝文件,創建一箇中間緩衝區
					byte[] bytes3 = new byte[1024 * 1024 * 5];
					//返回值表示本次實際讀取到的字節數
					int r = fsRead.Read(bytes3,0,bytes3.Length);
					//將讀取到的內容寫入新文件中
					while (r > 0) {
						//第三個參數是讀取到的字節數,而不是數組長度
						fsWrite.Write(bytes3,0,r);
						fsRead.Read(bytes3, 0, r);
						double d = (fsWrite.Position / (double)fsRead.Length) * 100;
						
					}

				}
			}

		}


		//壓縮
		private void compressTest() {
			//讀取源文件
			using (FileStream fsRead = File.OpenRead("1.txt")) {
				//寫入新文件的流
				using (FileStream fsWrite = File.OpenWrite("yasuo.rar")) {
					//創建壓縮流
					using (GZipStream zip = new GZipStream(fsWrite,CompressionMode.Compress)) {
						byte[] buffer = new byte[1024 * 10];
						int r;
						while ((r = fsRead.Read(buffer,0,buffer.Length)) > 0) {
							zip.Write(buffer,0,r);
						}
					}
				}
			}
		}

		//解壓
		private void deCompressTest() {
			//讀取壓縮文件
			using (FileStream fsRead = File.OpenRead("yssuo.rar")) {
				//創建壓縮流
				using (GZipStream zip = new GZipStream(fsRead, CompressionMode.Decompress)) {
					using (FileStream fsWrite = File.OpenWrite("jieya.txt")) {
						byte[] buffer = new byte[1024 * 10];
						//解壓讀取
						int r;
						while ((r = zip.Read(buffer,0,buffer.Length)) > 0) {
							//寫入新文件
							fsWrite.Write(buffer,0,r);

						}
					} 
				}
			}

		}

		private void StreamTest() {

			using (StreamReader reader = new StreamReader("1.txt", Encoding.Default)) {

				//streamReader是逐行讀取文本文件
				//直到文件的末尾,獲取一個值,該值指示當前的流位置是否在流結尾。
				while (!reader.EndOfStream) {
					reader.ReadLine();
				}

				string line = null;
				while ((line = reader.ReadLine()) != null) {
					Console.WriteLine(line);
				}
				
			}

			using (StreamWriter writer = new StreamWriter("test.txt", true, Encoding.Default)) {
				for (int i = 0;i < 100;i++) {
					writer.WriteLine(i);
				}
			}

			string directoryPath = @"c:\users\public\reports";
			//創建一個文件夾對象
			DirectoryInfo directorySelecter = new DirectoryInfo(directoryPath);
			//獲取當前文件夾下的所有子文件
			foreach (FileInfo fileToCompress in directorySelecter.GetFiles()) {
				//對於每個
				Compress(fileToCompress);
			}
			 
			foreach (FileInfo fileToDecompress in directorySelecter.GetFiles("*.gz")) {
				DeCompress(fileToDecompress);
			}
		}

		public static void Compress(FileInfo fileToCpmpress) {
			//創建一個指向當前文件fileToCompress的文件流
			using (FileStream originalFileStream = fileToCpmpress.OpenRead()) {
				if ((File.GetAttributes(fileToCpmpress.FullName) & FileAttributes.Hidden) != FileAttributes.Hidden & fileToCpmpress.Extension != ".gz" ){
					//創建一個指向新文件的一個文件流
					using (FileStream compressFileStream = File.Create(fileToCpmpress.FullName + ".gz")) {
						using (GZipStream compressionStream = new GZipStream(compressFileStream, CompressionMode.Compress)) {
							//將源文件的文件流直接拷貝到壓縮流中compressionStream
							originalFileStream.CopyTo(compressionStream);
							Console.WriteLine("compressed{0} from {1} to {2} bytes",
								fileToCpmpress.Name,fileToCpmpress.Length.ToString(),compressFileStream.Length.ToString());
						}
					}
				}
			}
		}

		public static void DeCompress(FileInfo fileToCompress) {

		}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章