In the previous articleArticle. In this article, I will introduce how to use C # To read and write text files.
The computer initially only supports ASCII encoding, but later it introduced the Unicode Character Set to support characters (such as Chinese characters) and some special characters (such as €) in other languages. There are many encoding methods based on UNICODE character sets, such as UTF-7, UTF-8, Unicode, and UTF-32. In Windows, the first few bytes of a text file are used to specify the encoding method of the file. If you use notepad or WordPad to open a text file, you do not need to worry about the file encoding method, because these applicationsProgramThe first few bytes of the file are read to determine the encoding method of the file, and then each character in the text is displayed with the correct encoding. In the figure below, we can see which encoding methods can be selected when a document is saved using notepad.
You do not need to worry about encoding when using. Net to read or write text files .. Net has encapsulated these. When reading a text file, if you already know the encoding method used by the text, you can specify the encoding method used to read the text. Otherwise, if you do not specify the encoding method ,. net will read the first few bytes of the text to determine the encoding method used to read the file content. When writing a text file, you can also specify the encoding method you want to use. If no encoding is specified,. Net determines the encoding method based on whether the written text contains special characters. If there are no special characters, it uses ASCII encoding, if there are special characters, it uses UTF-8 encoding.
(1) reading files
If you want to read not many files, you can use file. readalltext (filepath) or specify the encoding method file. readalltext (filepath, encoding. They read all the text content at a time and return a string containing all the text content.
StringSTR = file. readalltext (@"C: \ temp \ ascii.txt");//You can also specify the encoding method.StringStr2 = file. readalltext (@"C: \ temp \ ascii.txt", Encoding. ASCII );
You can also use file. readalllines. This method returns a string array. Each row is an array element.
String[] STRs = file. readalllines (@"C: \ temp \ ascii.txt");//You can also specify the encoding method.String[] Strs2 = file. readalllines (@"C: \ temp \ ascii.txt", Encoding. ASCII );
When the text content is large, we should not read the text content once, but use stream to read the content .. Net encapsulates the streamreader class for us. There are many methods to initialize the streamreader class. Below I will list several
Streamreader SR1 = New Streamreader ( @" Utf-8.txt c: \ temp \ " ); // You can also specify the encoding method. Streamreader Sr2 = New Streamreader ( @" Utf-8.txt c: \ temp \ " , Encoding. utf8); filestream FS = New Filestream ( @" Utf-8.txt c: \ temp \ " , Filemode. Open, fileaccess. Read, fileshare. None); streamreader sr3 =New Streamreader (FS); streamreader sr4 = New Streamreader (FS, encoding. utf8); fileinfo myfile = New Fileinfo ( @" Utf-8.txt c: \ temp \ " ); // Opentext creates a UTF-8-encoded streamreader object Streamreader sr5 = Myfile. opentext (); // Opentext creates a UTF-8-encoded streamreader object Streamreader sr6 = file. opentext ( @" Utf-8.txt c: \ temp \ " );
After initialization, you can read a row or a character each time. You can also read several characters or even read all the content at a time.
// Read a row String Nextline = Sr. Readline (); // Read one character Int Nextchar = Sr. Read (); // Read 100 characters Int Nchars = 100 ; Char [] Chararray = New Char [Nchars]; Int Ncharsread = Sr. Read (chararray, 0 , Nchars ); // Read all String Restofstream = Sr. readtoend ();
After streamreader is used, do not forget to close it: Sr. closee ();
If we need to read the entire text file in one row, let's take a complete example:
Streamreader sr = file. opentext (@"C: \ temp \ ascii.txt");StringNextline;While(Nextline = Sr. Readline ())! =Null) {Console. writeline (nextline);} Sr. Close ();
(2) Writing files
Writing a file is the same as reading a file. If you want to write less content, you can use the file. writealltext method to write all the content at a time as a file. If you want to write the content of a string to a file, you can use file. writealltext (filepath) or specify the encoding method file. writealltext (filepath, encoding.
StringStr1 ="Good morning!"; File. writealltext (@"C: \ temp \ test \ ascii.txt", Str1 );//You can also specify the encoding method.File. writealltext (@"C: \ temp \ test \ ascii-2.txt", Str1, encoding. ASCII );
If you have a string array and want to write each string element into the file, you can use the file. writealllines method:
String[] STRs = {"Good morning!","Good afternoon!"}; File. writealllines (@"C: \ temp \ ascii.txt", STRs); file. writealllines (@"Ascii-2.txt c: \ temp \", STRs, encoding. ASCII );
When the file. writealltext or file. writealllines method is used, if the specified file path does not exist, a new file is created. If the file already exists, the original file is overwritten.
When you want to write a large amount of content, you also need to use stream writing .. The class encapsulated by. NET is streamwriter. There are also many methods to initialize the streamwriter class:
// If the file does not exist, create a file. If yes, overwrite the file. Streamwriter SW1 = New Streamwriter ( @" Utf-8.txt c: \ temp \ " ); // You can also specify the encoding method. // True is append text, and false is used to overwrite the original file. Streamwriter sw2 = New Streamwriter ( @" Utf-8.txt c: \ temp \ " , True , Encoding. utf8 ); // Filemode. createnew: Creates a file if the file does not exist. If the file already exists, an exception is thrown. Filestream FS = New Filestream ( @" Utf-8.txt c: \ temp \ " , Filemode. createnew, fileaccess. Write, fileshare. Read ); // UTF-8 is default encoding Streamwriter sw3 = New Streamwriter (FS); streamwriter sw4 = New Streamwriter (FS, encoding. utf8 ); // If the file does not exist, create a file. If yes, overwrite the file. Fileinfo myfile = New Fileinfo ( @" Utf-8.txt c: \ temp \ " ); Streamwriter sw5 = Myfile. createtext ();
After initialization, you can use a streamwriter object to write a row, a character, a character array, or even a part of a character array at a time.
// write a character SW. write ( ' A ' ); // write an array of characters char [] chararray = New char [ 100 ]; /// initialize these characters SW. write (chararray); /// write a part of a character array SW. write (chararray, 10 , 15 );
Similarly, do not close streamwriter objects after they are used up. Sw. Close (); finally, let's take a complete example of using streamwriter to write a row at a time:
Fileinfo myfile =NewFileinfo (@"Utf-8.txt c: \ temp \"); Streamwriter SW=Myfile. createtext ();String[] STRs = {"Good morning","Good afternoon"};Foreach(VaRSInSTRs) {Sw. writeline (s);} Sw. Close ();