A little weird how it wants the using directives inside the namespace curlys
i.e
// <copyright file="RbIo.cs" company="DWM Cabinet Drawings LLC">
// Copyright (c) 2008 All Rights Reserved </copyright>
// <author>Daniel Marcotte</author>
// <email>Danielm103@gmail.com</email>
// <date>2008-01-04</date>
// <summary>Contains Code</summary>
// some code is from http://blogs.msdn.com/bclteam/archive/2005/06/15/429542.aspx
namespace AcIo
{
using System;
using System.IO;
using System.IO.Compression;
using Autodesk.AutoCAD.DatabaseServices;
/// <summary>
/// Contains static methods for converting
/// a file to a Resultbuffer and back
/// </summary>
public class RbIo
{
/// <summary>
/// Converts a file to a ResultBuffer
/// </summary>
/// <param name="path">String: Path to file</param>
/// <param name="compress">Bool: use compression</param>
/// <returns>a new ResultBuffer</returns>
public static ResultBuffer FileToResultBuffer(string path, bool compress)
{
if (!File.Exists(path))
{
throw new ArgumentException("File Does not Exist", "path");
}
ResultBuffer buf = new ResultBuffer();
using (FileStream fs = File.OpenRead(path))
{
using (MemoryStream ms = new MemoryStream())
{
if (compress)
{
Compress(fs, ms);
StreamToResultBuffer(ms, buf);
}
else
{
StreamToResultBuffer(fs, buf);
}
}
fs.Close();
}
return buf;
}
/// <summary>
/// Coverts a ResultBuffer to a file
/// </summary>
/// <param name="buf">ResultBuffer: buffer to convert</param>
/// <param name="path">String: File path</param>
/// <param name="decompress">Bool: decompress</param>
public static void ResultBufferToFile(ResultBuffer buf, string path, bool decompress)
{
if (buf == null)
{
throw new ArgumentNullException("ResultBuffer buffer");
}
using (FileStream fs = new FileStream(path, FileMode.Create))
{
using (MemoryStream ms = new MemoryStream())
{
if (decompress)
{
ResultBufferToStream(buf, ms);
Decompress(ms, fs);
}
else
{
ResultBufferToStream(buf, fs);
}
}
fs.Close();
}
}
/// <summary>
/// Converts a resulf buffer to a stream
/// </summary>
/// <param name="buf">ResultBuffer: buffer to convert</param>
/// <param name="destination">destination stream</param>
/// Close the stream when you are done
public static void ResultBufferToStream(ResultBuffer buf, Stream destination)
{
if (buf == null)
{
throw new ArgumentNullException("ResultBuffer buffer");
}
BinaryWriter br = new BinaryWriter(destination);
br.BaseStream.Position = 0;
foreach (TypedValue t in buf)
{
br.Write((byte[])t.Value);
}
br.BaseStream.Position = 0;
}
/// <summary>
/// Converts a Stream to a ResultBuffer
/// </summary>
/// <param name="source">Stream: Stream to convert</param>
/// <param name="buf">ResultBuffer: destination buffer</param>
public static void StreamToResultBuffer(Stream source, ResultBuffer buf)
{
BinaryReader br = new BinaryReader(source);
br.BaseStream.Position = 0;
while (source.Position < br.BaseStream.Length)
{
if ((br.BaseStream.Length - br.BaseStream.Position) > 127)
{
buf.Add(new TypedValue((short)DxfCode.BinaryChunk, br.ReadBytes(127)));
}
else
{
buf.Add(new TypedValue(
(short)DxfCode.BinaryChunk,
br.ReadBytes(Convert.ToInt32(br.BaseStream.Length - br.BaseStream.Position))));
}
}
br.BaseStream.Position = 0;
}
/// <summary>
/// Compress stream
/// </summary>
/// <param name="source">Stream: source</param>
/// <param name="destination">Stream: destination</param>
public static void Compress(Stream source, Stream destination)
{
using (GZipStream output = new GZipStream(destination, CompressionMode.Compress, true))
{
Pump(source, output);
}
}
/// <summary>
/// Decompress Stream
/// </summary>
/// <param name="source">Stream: source</param>
/// <param name="destination">Stream: destination</param>
public static void Decompress(Stream source, Stream destination)
{
using (GZipStream input = new GZipStream(source, CompressionMode.Decompress))
{
Pump(input, destination);
}
}
/// <summary>
/// Helper function for Compress and Decompress
/// </summary>
/// <param name="input">Stream: input</param>
/// <param name="output">Stream: output</param>
private static void Pump(Stream input, Stream output)
{
byte[] bytes = new byte[4096];
int n;
while ((n = input.Read(bytes, 0, bytes.Length)) != 0)
{
output.Write(bytes, 0, n);
}
}
}
}