using System; using System.IO; using System.Text; class FileIOTest { public static int Main(String[] args) { int ret = 0; if (args.Length == 0) { Console.WriteLine("Missing file name"); return 1; } if (args.Length < 2) { Console.WriteLine("Missing key string"); return 1; } FileStream stream = null; BinaryReader reader = null; BinaryWriter writer = null; try { stream = new FileStream( args[0], FileMode.Open, FileAccess.ReadWrite ); reader = new BinaryReader(stream); writer = new BinaryWriter(stream); byte[] buffer = new byte[1024]; byte[] key = new ASCIIEncoding().GetBytes(args[1]); int keyLen = key.Length; long fileSize = stream.Length; long processed = 0; long pos = 0; while (processed < fileSize) { int requested = 1024; if (requested > fileSize - processed) requested = (int)(fileSize - processed); int bytesRead = reader.Read(buffer, 0, requested); if (bytesRead <= 0) break; for (int i = 0; i < bytesRead; i++) { buffer[i] ^= key[(pos + i) % keyLen]; } stream.Seek(pos, SeekOrigin.Begin); writer.Write(buffer, 0, bytesRead); processed += bytesRead; pos += bytesRead; } } catch (Exception e) { Console.WriteLine(e.Message); ret = 1; } finally { if (stream != null) { stream.Close(); } } return ret; } }