IST311 Chapter13.NET Files (Part2) using System; using System.Collections.Generic; using System.ComponentModel; using System.IO; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading.Tasks; using System.Xml; using System.Xml.Serialization; namespace Draft13 class Program static void Main(string[] args) //Experiment01(); // reading & writing text files //Experiment02(); // reading & interpreting data //Experiment03(); // serializing XML data //Experiment04(); // serialize a list of person objects //Experiment05(); // de-serialize a list of Person objects //Experiment06(); // merge two files //Experiment07(); // Problem 13.01 //Experiment08(); // the using(...) clasuse //Experiment10(); // convert byte[] <-> string //Experiment11(); // files - random access mode Console.ReadLine(); //Main ///////////////////////////////////////////////////////////////////// private static void Experiment10() // converting char[], byte[], string char[] chararray = new char[] 'H', 'E', 'L', 'L', 'O' ; string strvalue = new string(chararray); Console.WriteLine(strValue.Length + " " + strvalue); char[] chararray2 = "Hello world".tochararray(); string strvalue2 = new string(chararray2); Console.WriteLine( strvalue2.length + " " + strvalue2); string str = "123".PadRight(20); Console.WriteLine( str.length + "***" + str + "***"); byte[] bytearray = Encoding.ASCII.GetBytes("Hola mundo"); string strfrombytes = Encoding.ASCII.GetString(byteArray); Console.WriteLine( bytearray ); Console.WriteLine( strfrombytes);
// //////////////////////////////////////////////////////////////////////////////////////// private static void Experiment11() //PART1. Craete the random file. FileStream randomfile = null; randomfile = new FileStream(@"c:\temp\randomDatFile.dat", FileMode.Create); Console.WriteLine("Done with random file"); catch (IOException e) Console.WriteLine("error " + e.message); return; finally randomfile.close(); //PART2. reopen the file, add records randomfile = new FileStream(@"c:\temp\randomDatFile.dat", FileMode.Open); catch (Exception e) Console.WriteLine("ERROR " + e.message); // Write ten RECORDS. Each record consists of 40 chars, begins with a key (3digits) // then some data, last symbol is "0". for (int i = 0; i < 10; i++) String strrec = ((100 + i) + " rest of the data record goes here").padright(39) + "0"; randomfile.write(encoding.ascii.getbytes(strrec), 0, 40); catch (IOException exc) Console.WriteLine(exc.Message); return;
//RANDOMLY junk around the file Byte[] bytearray = new byte[40]; ; randomfile.seek(0, SeekOrigin.Begin); // seeking first record Console.WriteLine("First record is: \t" + Encoding.ASCII.GetString(byteArray) ); randomfile.seek(0, SeekOrigin.Begin); // seeking second record Console.WriteLine("Second record is: \t" + Encoding.ASCII.GetString(byteArray)); //traverse the random file int offset; for (int i = 0; i < 10; i++) //for(int i=9; i>= 0; i--) //for(int i=0; i< 10; i+=2) offset = 40 * i; randomfile.seek(offset, SeekOrigin.Begin); Console.WriteLine("Record at location 0 is \t 1", i, Encoding.ASCII.GetString(byteArray)); //apply a 'logical delete' to a record at given position int posrecordtodelete = 7; offset = 40 * posrecordtodelete; randomfile.seek(offset, SeekOrigin.Begin); // seeking record Console.WriteLine("Before deleting \t" + Encoding.ASCII.GetString(byteArray)); bytearray[39] = (byte)'1'; //change last byte Console.WriteLine("After marking \t" + Encoding.ASCII.GetString(byteArray)); randomfile.seek(offset, SeekOrigin.Begin); // seeking record randomfile.write(bytearray, 0, 40); //write changed record back to disk randomfile.seek(offset, SeekOrigin.Begin); // seeking record //read record Console.WriteLine( "After deleting \t" + Encoding.ASCII.GetString(byteArray) ); Console.WriteLine(); catch (IOException exc) Console.WriteLine(exc.Message); Console.WriteLine(); randomfile.close();
private static void Experiment07() //Exmaples: //DirectoryInfo info = new DirectoryInfo("."); //DirectoryInfo info = new DirectoryInfo(@"c:/temp"); DirectoryInfo info = new DirectoryInfo(@"c:/"); // -------------------------------------------------------------- // find all files in given directory string result = info.fullname + "\n\n" + "File Names".PadRight(40) + "Size".PadLeft(20) + "\n"; foreach (FileInfo myfile in info.getfiles("*.*")) result += myfile.name.padright(40) + myfile.length.tostring().padleft(20) + "\n"; Console.WriteLine(result); // list all sub-directories under given folder foreach (DirectoryInfo mydir in info.getdirectories()) result += "DIR... " + mydir.name + "\n"; Console.WriteLine(result); //look for a particular file, make a copy, finally delete the original if (File.Exists(@"c:/temp/mergedfile.txt")) File.Copy(@"c:/temp/mergedfile.txt", @"c:/temp/mergedfile_copy.txt"); File.Delete(@"c:/temp/mergedfile.txt"); Console.WriteLine(@"Done with copy-delete see mergedfile_copy.txt");
private static void Experiment06() //merge two files put results in a new file StreamReader infile1 = new StreamReader(@"c:/temp/mergingfile1.txt"); StreamReader infile2 = new StreamReader(@"c:/temp/mergingfile2.txt"); StreamWriter outfile = new StreamWriter(@"c:/temp/mergedfile.txt"); string line1 = infile1.readline(); string line2 = infile2.readline(); while (line1!= null && line2!= null) if (line1.compareto(line2) <= 0) outfile.writeline(line1); line1 = infile1.readline(); else outfile.writeline(line2); line2 = infile2.readline(); while (line1!= null) outfile.writeline(line1); line1 = infile1.readline(); while (line2!= null) outfile.writeline(line2); line2 = infile2.readline(); infile1.close(); infile2.close(); outfile.close(); Console.WriteLine("Merging done...");
private static void Experiment05() XmlDocument doc = new XmlDocument(); doc.load(@"c:/temp/mycsfile3.xml"); foreach (XmlNode node in doc.documentelement.childnodes) string text = node.innertext; //or loop through its children as wel Console.WriteLine(text); foreach (XmlNode node in doc.documentelement.selectnodes("lazyclsperson/firstname")) string text = node.innertext; //or loop through its children as wel Console.WriteLine(text); foreach (XmlNode node in doc.documentelement.selectnodes("lazyclsperson/phone")) string text = node.innertext; //or loop through its children as wel Console.WriteLine(text); Console.WriteLine("Done Experiment05");
private static void Experiment04() List<LazyClsPerson> people = new List<LazyClsPerson>(); LazyClsPerson person1 = new LazyClsPerson(); person1.firstname = "Sansa"; person1.lastname = "Stark"; person1.phone = "555-7777"; LazyClsPerson person2 = new LazyClsPerson(); person2.firstname = "Arya"; person2.lastname = "Stark"; person2.phone = "555-6666"; people.add(person1); people.add(person2); //XmlSerializer xmlserializer = // new XmlSerializer(people.GetType()); //xmlserializer.serialize(console.out, people); //Console.WriteLine(); //Console.ReadLine(); XmlSerializer xmlserializer = new XmlSerializer(people.GetType()); StreamWriter outputfile = new StreamWriter(@"c:/temp/mycsfile3.xml"); xmlserializer.serialize(outputfile, people); Console.WriteLine("Done Experiment04"); Console.ReadLine(); private static void Experiment03() LazyClsPerson person = new LazyClsPerson(); person.firstname = "Sansa"; person.lastname = "Stark"; person.phone = "555-7777"; XmlSerializer xmlserializer = new XmlSerializer(person.GetType()); xmlserializer.serialize(console.out, person); Console.WriteLine(); Console.ReadLine();
private static void Experiment02() StreamReader infile = new StreamReader(@"c:/temp/mycsfile2.txt"); String line; int row = 0; string[] tokens = new string[3]; //first, last, phone while ((line = infile.readline())!= null) string[] datachunk = line.split(); if (datachunk.length == 3) tokens = datachunk; if (datachunk.length == 2) tokens[0] = datachunk[0]; tokens[1] = ""; //no last name! tokens[2] = datachunk[1]; for (int i = 0; i < tokens.length; i++) Console.WriteLine(row + "\t" + i + "\t" + tokens[i]); Console.WriteLine(); row++; catch (Exception e) Console.WriteLine("PROBLEM: " + e.message); Environment.Exit(0);
private static void Experiment01() StreamWriter output = new StreamWriter(@"c:/temp/mycsfile.txt"); for (int i = 0; i < 5; i++) output.writeline("this is line-" + i); output.writeline(datetime.now); output.close(); catch (Exception e) Console.WriteLine("ERROR: " + e.message); // --------------------------------------------------------------------- StreamReader input = new StreamReader(@"c:\temp\mycsfile.txt"); string line; while ((line = input.readline())!= null) Console.WriteLine("ECHO>>> " + line); catch (Exception e) //Program Console.WriteLine("ERROR READING: " + e.message);