C# 文件操作


在.NET Framework中進行的所有的輸入和輸出工作都要用到流(stream),流是序列化設備(serial device)的抽象表示。

System.IO包含了用於在文件中讀寫數據的類。

File 類 靜態實用類 提供靜態方法 用於移動 復制和刪除文件

Directory 類靜態實用類 提供靜態方法 用於移動 復制和刪除文件

Path 類 用於處理路徑名稱

FileInfo 類 表示磁盤上的物理文件,該類包含處理文件的方法。要完成對文件的讀寫工作,必須創建Stream對象。

DirectoryInfo 類 表示磁盤上的文件,包含處理目錄的方法。

FileStreamInfo 用作FileInfo和DirectoryInfo的基類,可以使用多態性同時處理文件和目錄。

FileStream類 表示可讀可寫,或者均可的文件,此文件可以同步或一部的讀寫。

SreamReader 從流中讀取字符數據,可使用FileStream將其創建為基類。

StreamWriter 向流中寫入數據,使用FileStream將其創建為基類。

FileSystemWatcher 用於監控文件和目錄,提供了這些文件和目錄發生變化時應用程序可以捕獲的事件。

 

System.IO.Compression 它允許使用GZIP壓縮或Default壓縮模式讀寫壓縮文件。

System.Runtime.Serialization.Formatters.Binary命名空間中的BinaryFormatter類允許把對象序列化為二進制數據流,並可以反序列化這些數據。

 

FileStream aFile = new FileStream(filename,FileMode.Member,FileAccess.Member);

FileStream aFile = File.OpenRead(“Data.txt”);

FileInfo aFileInfo = new FileInfo(“Data.txt”);

FileStream aFile = aFileInfo.OpenRead();

 

DirectoryInfo dir = new DirectoryInfo(Path);

FileSystemInfo[]fsi = dir.GetFileSystemInfos);//獲取所有子目錄及文件

 

文件位置

Seek()方法。

AFile.Seek(8,SeekOrigin.Begin);//將文件指針移動到文件的第八個字節。

FileStream myReadStream = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Read);
            myReadStream.Seek(6, SeekOrigin.Begin);
            myReadStream.Read(byData, 0, 128);

StreamReader

實現一個 TextReader,使其以一種特定的編碼從字節流中讀取字符。

StreamReader 旨在以一種特定的編碼輸入字符,而 Stream 類用於字節的輸入和輸出。使用 StreamReader 讀取標准文本文件的各行信息。

除非另外指定,StreamReader 的默認編碼為 UTF-8,而不是當前系統的 ANSI 代碼頁。UTF-8 可以正確處理 Unicode 字符並在操作系統的本地化版本上提供一致的結果。

View Code
try 
        {
            // Create an instance of StreamReader to read from a file.
            // The using statement also closes the StreamReader.
            using (StreamReader sr = new StreamReader("TestFile.txt")) 
            {
                String line;
                // Read and display lines from the file until the end of 
                // the file is reached.
                while ((line = sr.ReadLine()) != null) 
                {
                    Console.WriteLine(line);
                }
            }
        }
        catch (Exception e) 
        {
            // Let the user know what went wrong.
            Console.WriteLine("The file could not be read:");
            Console.WriteLine(e.Message);
        }
View Code
string path = @"c:\temp\MyTest.txt";
        try 
        {
            if (File.Exists(path)) 
            {
                File.Delete(path);
            }

            using (StreamWriter sw = new StreamWriter(path)) 
            {
                sw.WriteLine("This");
                sw.WriteLine("is some text");
                sw.WriteLine("to test");
                sw.WriteLine("Reading");
            }

            using (StreamReader sr = new StreamReader(path)) 
            {
                while (sr.Peek() >= 0) 
                {
                    Console.WriteLine(sr.ReadLine());
                }
            }
        } 
        catch (Exception e) 
        {
            Console.WriteLine("The process failed: {0}", e.ToString());
        }

讀取數據最簡單的方法是Read()方法。

此方法將流的下一個字符作為正整數值返回,如果達到流的結尾處,返回-1.使用Convert實用類把這個值轉化為字符。

StreamReader  sr = new  StreamReader();

Int nChar;

nChar=sr.Read();

While(nChar!=-1)

{

Console.Write(Convert.ToChar(nChar));

nChar = sr.Read();

}

Sr.Close();

StreamWriter 類

實現一個 TextWriter,使其以一種特定的編碼向流中寫入字符。

FileStream fs = new FileStream(fileName,  FileMode.CreateNew, FileAccess.Write, FileShare.None);      

           StreamWriter swFromFile = new StreamWriter(logFile);

            swFromFile.Write(textToAdd);

            swFromFile.Flush();

            swFromFile.Close();

文件屬性

FileInfo fileInfo = new FileInfo(path);

//去掉隱藏屬性

fileInfo.Attributes &= ~FileAttributes.Hidden;

//去掉只讀屬性

fileInfo.Attributes &= ~FileAttributes.ReadOnly;

添加隱藏屬性

fileInfo.Attributes |= FileAttributes.Hidden;

GetAttibutes()和SetAttributes()方法可以獲取或設定文件屬性。

查找指定目錄下的所有子目錄和文件
 public void FindFile(string dir)
        {
            string[] Alldir = Directory.GetDirectories(dir);
            try
            {
                foreach (string Strdir in Alldir)
                {
                    FindFile(Strdir + "\\");
                    listBox1.Items.Add(Strdir + "\\");//添加目錄名
                }
                foreach (string Strfile in Directory.GetFiles(dir))
                {
                    listBox1.Items.Add(Strfile);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string path = "";
            if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
            {
                path = folderBrowserDialog1.SelectedPath;
            }
            if (path.Length > 1)
            {
                if (path[path.Length - 1] != '\\')
                {
                    path += "\\";
                }
            }
            FindFile(path);
            //DirectoryInfo dir = new DirectoryInfo(path);
            //FileSystemInfo[] fsi = dir.GetFileSystemInfos();
            //foreach (FileSystemInfo f in fsi)
            //{
            //    listBox1.Items.Add(f.FullName);
            //}
        }
讀寫壓縮文件
 public static void SaveCompressionFile(string fileName, string data)
        {
            FileStream fileStream = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Write);
            GZipStream compressionStream = new GZipStream(fileStream, CompressionMode.Compress);
            StreamWriter writer = new StreamWriter(compressionStream);
            writer.Write(data);
            writer.Close();
        }

        public static string LoadCompressionFile(string fileName)
        {
            FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read);
            GZipStream compressionStream = new GZipStream(fileStream, CompressionMode.Decompress);
            StreamReader reader = new StreamReader(compressionStream);
            string data = reader.ReadToEnd();
            return data;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string path = "";
            openFileDialog1.InitialDirectory = "c:\\";
            openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
            openFileDialog1.FilterIndex = 2;
            openFileDialog1.RestoreDirectory = true;

            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {    
                    path = openFileDialog1.FileName;
                    //return new FileStream(path, System.IO.FileMode.Open,System.IO.FileAccess.ReadWrite);
            }
            try
            {
                label1.Text = textBox1.Text.Length.ToString();
                SaveCompressionFile(path, textBox1.Text.Trim());
                FileInfo fileInfo = new FileInfo(path);
                label2.Text = fileInfo.Length.ToString();
                textBox2.Text = LoadCompressionFile(path);
            }
            catch(IOException ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
計算機上的驅動器
class Program
    {
        static void Main(string[] args)
        {
            DriveInfo[] Drives;
            ArrayList hardDisk = new ArrayList(); ;
            Drives = DriveInfo.GetDrives();
            int drvCount = Drives.Length;
            Console.WriteLine("本地計算機上共有邏輯驅動器 " + drvCount + " 個,分別是:");
            foreach (DriveInfo item in Drives)
            {
                Console.Write(item + "\t");
                if (item.DriveType == DriveType.Fixed)
                {
                    hardDisk.Add(item.ToString());
                }
            }
            Console.WriteLine("\n本地計算機上共有本地驅動器 " + hardDisk.Count + " 個,分別是:");
            foreach (var Disk in hardDisk)
            {
                Console.Write(Disk + "\t");
            }
            string drvName = @"E:\";
            DriveInfo drvInfo = new DriveInfo(drvName);
            Console.WriteLine("驅動器E的信息如下:");
            Console.WriteLine("名 稱: " + drvInfo.Name);
            Console.WriteLine("卷 標: " + drvInfo.VolumeLabel);
            Console.WriteLine("驅動器類型: " + drvInfo.DriveType);
            Console.WriteLine("文件系統類型: " + drvInfo.DriveFormat);
            Console.WriteLine("總共空間大小:" + drvInfo.TotalSize);
            Console.WriteLine("剩余空間大小:" + drvInfo.TotalFreeSpace);
            Console.WriteLine("根目錄:" + drvInfo .RootDirectory );

            //string path = @"D:\My Documents";
            //string[] AllFile = Directory.GetFiles(path);
            //ArrayList picFile = new ArrayList();

            //for (int i = 0; i < AllFile.Length; i++)
            //{
            //    FileInfo fi = new FileInfo(AllFile[i]);
            //    if (fi.Extension == ".jpg" || fi.Extension == ".bmp")
            //        picFile.Add(AllFile[i]);
            //}
            //foreach (string file in picFile)
            //{
            //    Console.WriteLine(file);
            //}
            //Console.WriteLine("共找到符合條件的:{0}個文件", picFile.Count.ToString());
            //string path = @"C:\aaa\bbb\ccc\dddd";
            //if (!Directory.Exists(path))
            //{
            //    Directory.CreateDirectory(path);
            //} 
            ////Directory類的Exists()方法用來判斷目錄是否存在,存在則返回true;  
            ////Directory類的CreateDirectory()方法用來創建目錄  

            //得到所有文件
            //string[] AllFile = Directory.GetFiles(@"d:\Test");
            //foreach (string file in AllFile)
            //{
            //    File.Delete(file);
            //}


            //string filepath = @"D:\WorkList.txt";
            ////string filepath = @"F:\VStest\file.txt";
            //FileInfo myfile = new FileInfo(filepath);
            //FileStream fs = myfile.Create();
            //fs.Close();
            //myfile.Refresh();
            //myfile.Delete();


            Console.ReadKey();
        }
    }

注:本文整理自網絡!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM