zoukankan      html  css  js  c++  java
  • C#中 File,Directory,FileInfo,DirectoryInfo区别与应用

    两者的共同点:

    一:都用于典型的操作,如复制、移动、重命名、创建、打开、删除和追加到文件

    二:默认情况下,将向所有用户授予对新文件的完全读/写访问权限。


    两者的区别:

    File类是静态类,由于所有的File方法都是静态的,所以如果只想执行一个操作,那么使用File方法的效率比使用相应的FileInfo 实例方法可能更高。所有的File方法都要求当前所操作的文件的路径。File 类的静态方法对所有方法都执行安全检查。如果打算多次重用某个对象,可考虑改用FileInfo的相应实例方法,因为并不总是需要安全检查。


    (不老神仙个人认为:

    file,directory可以控制多个文件所以进行每次安全检查,而FileInfo,DirectoryInfo只能控制一个文件信息只进行一次安全处理。

    静态方法每次对文件进行操作过程是:静态方法存在于栈头,它是由类调用,然后寻找需要操作的文件。寻找需要操作文件的过程是个IO过程,耗时比较长。但它不必要到堆区去遍历实例化新对象。

    普通方法是由当时的对象调用,需要创建对象,new一个,(静态方法不需要此过程)但如果操作次数多的话,普通方法就不需要再次去执行不必要而且耗时的IO操作,就能整体提速!

    所以执行方法的次数也就能决定了使用哪个类的最佳选择。

    参考《ASP.NET与VB.NET从入门到精通》(电子工业出版社 A.Rusell Jones 著 高春蓉 谷宇 阎隽等译))

    下面的示例演示了File类的一些主要成员。

    using System;
    using System.IO;

    class Test 
    {
        
    public static void Main() 
        
    {
            
    string path = @"c: empMyTest.txt";
            
    if (!File.Exists(path)) 
            
    {
                
    // Create a file to write to.
                using (StreamWriter sw = File.CreateText(path)) 
                
    {
                    sw.WriteLine(
    "Hello");
                    sw.WriteLine(
    "And");
                    sw.WriteLine(
    "Welcome");
                }
        
            }

            
    // Open the file to read from.
            using (StreamReader sr = File.OpenText(path)) 
            
    {
                
    string s = "";
                
    while ((s = sr.ReadLine()) != null
                
    {
                    Console.WriteLine(s);
                }

            }

            
    try 
            
    {
                
    string path2 = path + "temp";
                
    // Ensure that the target does not exist.
                File.Delete(path2);

                
    // Copy the file.
                File.Copy(path, path2);
                Console.WriteLine(
    "{0} was copied to {1}.", path, path2);

                
    // Delete the newly created file.
                File.Delete(path2);
                Console.WriteLine(
    "{0} was successfully deleted.", path2);
            }
     
            
    catch (Exception e) 
            
    {
                Console.WriteLine(
    "The process failed: {0}", e.ToString());
            }

        }

    }

    File.Create 方法 (String)

    参数path:要创建的文件的路径及名称。

    返回值:一个 FileStream,它提供对 path 中指定的文件的读/写访问。

    下面的示例在指定路径中创建一个文件,将一些信息写入该文件,再从文件中读取。

    using System;
    using System.IO;
    using System.Text;
    class Test
    {
        
    public static void Main()
        
    {
            
    string path = @"c: empMyTest.txt";
            
    try
            
    {
                
    // Delete the file if it exists.
                if (File.Exists(path))
                
    {
                    File.Delete(path);
                }

                
    // Create the file.
                using (FileStream fs = File.Create(path))
                
    {
                    Byte[] info 
    = new UTF8Encoding(true).GetBytes("This is some text in the file.");
                    
    // Add some information to the file.
                    fs.Write(info, 0, info.Length);
                }

                
    // Open the stream and read it back.
                using (StreamReader sr = File.OpenText(path))
                
    {
                    
    string s = "";
                    
    while ((s = sr.ReadLine()) != null)
                    
    {
                        Console.WriteLine(s);
                    }

                }

            }

            
    catch (Exception Ex)
            
    {
                Console.WriteLine(Ex.ToString());
            }

        }

    }

     File.OpenText 方法:打开现有 UTF-8 编码文本文件以进行读取。

    参数path:要打开以进行读取的文件。

    返回值:指定路径上的 StreamReader

    File.CreateText 方法:创建或打开一个文件用于写入 UTF-8 编码的文本。

    参数path:要打开以进行写入的文件。

    返回值:一个 StreamWriter,它使用 UTF-8 编码写入指定的文件。

    下面的示例创建一个文件,用于写入和读取文本。

    using System;
    using System.IO;
    class Test 
    {
        
    public static void Main() 
        
    {
            
    string path = @"c: empMyTest.txt";
            
    if (!File.Exists(path)) 
            
    {
                
    // Create a file to write to.
                using (StreamWriter sw = File.CreateText(path)) 
                
    {
                    sw.WriteLine(
    "Hello");
                    sw.WriteLine(
    "And");
                    sw.WriteLine(
    "Welcome");
                }
        
            }

            
    // Open the file to read from.
            using (StreamReader sr = File.OpenText(path)) 
            
    {
                
    string s = "";
                
    while ((s = sr.ReadLine()) != null
                
    {
                    Console.WriteLine(s);
                }

            }

        }

    }

     下面的示例演示了 FileInfo 类的一些主要成员。

    using System;
    using System.IO;
    class Test 
    {
        
    public static void Main() 
        
    {
            
    string path = Path.GetTempFileName();
            FileInfo fi1 
    = new FileInfo(path);
            
    if (!fi1.Exists) 
            
    {
                
    //Create a file to write to.
                using (StreamWriter sw = fi1.CreateText()) 
                
    {
                    sw.WriteLine(
    "Hello");
                    sw.WriteLine(
    "And");
                    sw.WriteLine(
    "Welcome");
                }
        
            }

            
    //Open the file to read from.
            using (StreamReader sr = fi1.OpenText()) 
            
    {
                
    string s = "";
                
    while ((s = sr.ReadLine()) != null
                
    {
                    Console.WriteLine(s);
                }

            }

            
    try 
            
    {
                
    string path2 = Path.GetTempFileName();
                FileInfo fi2 
    = new FileInfo(path2);
                
    //Ensure that the target does not exist.
                fi2.Delete();
                
    //Copy the file.
                fi1.CopyTo(path2);
                Console.WriteLine(
    "{0} was copied to {1}.", path, path2);
                
    //Delete the newly created file.
                fi2.Delete();
                Console.WriteLine(
    "{0} was successfully deleted.", path2);
            }
     
            
    catch (Exception e) 
            
    {
                Console.WriteLine(
    "The process failed: {0}", e.ToString());
            }

        }

    }
    FileInfo.Open 方法 (FileMode):在指定的模式中打开文件。
    参数 mode:一个 FileMode 常数,它指定打开文件所采用的模式(例如 OpenAppend)。
    返回值:在指定模式中打开、具有读/写访问权限且不共享的文件。
    FileInfo.OpenRead 方法:该方法返回一个 FileShare 模式设置为 Read 的只读 FileStream 对象。
    返回值:新的只读 FileStream 对象。
    FileInfo.AppendText 方法:创建一个 StreamWriter,它向 FileInfo 的此实例表示的文件追加文本。
    FileInfo.Create 方法 :创建文件。
    下面的示例创建对文件的引用,然后使用 FileInfo.Create() 在磁盘上创建此文件。
    using System;
    using System.IO;
    public class DeleteTest 
    {
        
    public static void Main() 
        
    {
            
    // Create a reference to a file.
            FileInfo fi = new FileInfo("temp.txt");
            
    // Actually create the file.
            FileStream fs = fi.Create();
            
    // Modify the file as required, and then close the file.
            fs.Close();
            
    // Delete the file.
            fi.Delete();
        }

    }
    下面的示例创建一个文件,向其中添加一些文本,然后从此文件中读取。
    using System;
    using System.IO;
    using System.Text;
    class Test 
    {
        
    public static void Main() 
        
    {
            
    string path = @"c: empMyTest.txt";
            FileInfo fi 
    = new FileInfo(path);
            
    // Delete the file if it exists.
            if (fi.Exists) 
            
    {
                fi.Delete();
            }

            
    //Create the file.
            using (FileStream fs = fi.Create()) 
            
    {
                Byte[] info 
    = 
                    
    new UTF8Encoding(true).GetBytes("This is some text in the file.");
                
    //Add some information to the file.
                fs.Write(info, 0, info.Length);
            }

            
    //Open the stream and read it back.
            using (StreamReader sr = fi.OpenText()) 
            
    {
                
    string s = "";
                
    while ((s = sr.ReadLine()) != null
                
    {
                    Console.WriteLine(s);
                }

            }

        }

    }
    FileInfo.OpenText 方法:创建使用 UTF8 编码、从现有文本文件中进行读取的 StreamReader
    返回值:使用 UTF8 编码的新 StreamReader。 
    FileInfo.CreateText 方法:创建写入新文本文件的 StreamWriter
    返回值:新的StreamWriter
    下面的示例说明 CreateText 方法和OpenText 方法
    using System;
    using System.IO;
    class Test 
    {
        
    public static void Main() 
        
    {
            
    string path = @"c: empMyTest.txt";
            FileInfo fi 
    = new FileInfo(path);
            
    if (!fi.Exists) 
            
    {
                
    //Create a file to write to.
                using (StreamWriter sw = fi.CreateText()) 
                
    {
                    sw.WriteLine(
    "Hello");
                    sw.WriteLine(
    "And");
                    sw.WriteLine(
    "Welcome");
                }

            }

            
    //Open the file to read from.
            using (StreamReader sr = fi.OpenText()) 
            
    {
                
    string s = "";
                
    while ((s = sr.ReadLine()) != null
                
    {
                    Console.WriteLine(s);
                }

            }

        }

    }

  • 相关阅读:
    poj 1789 每个字符串不同的字母数代表两个结点间的权值 (MST)
    poj 1251 poj 1258 hdu 1863 poj 1287 poj 2421 hdu 1233 最小生成树模板题
    poj 1631 最多能有多少条不交叉的线 最大非降子序列 (LIS)
    hdu 5256 最少修改多少个数 能使原数列严格递增 (LIS)
    hdu 1025 上面n个点与下面n个点对应连线 求最多能连有多少条不相交的线 (LIS)
    Gym 100512F Funny Game (博弈+数论)
    UVa 12714 Two Points Revisited (水题,计算几何)
    UVa 12717 Fiasco (BFS模拟)
    UVa 12718 Dromicpalin Substrings (暴力)
    UVa 12716 && UVaLive 6657 GCD XOR (数论)
  • 原文地址:https://www.cnblogs.com/allanbolt/p/1490000.html
Copyright © 2011-2022 走看看