public virtual void UntokenFile(string source, string destination)
{
Utilities.ArgumentNotNullOrEmpty("source", source);
Utilities.ArgumentNotNullOrEmpty("destination", destination);
// Make sure that the destination folder exists.
string destinationFolder = Path.GetDirectoryName(destination);
if (!Directory.Exists(destinationFolder))
{
Directory.CreateDirectory(destinationFolder);
}
// Open the file. Check to see if the File is binary or text.
// NOTE: This is not correct because GetBinaryType will return true
// only if the file is executable, not if it is a dll, a library or
// any other type of binary file.
uint binaryType;
if (!NativeMethods.GetBinaryType(source, out binaryType))
{
Encoding encoding = Encoding.Default;
string buffer = null;
// Create the reader to get the text. Note that we will default to ASCII as
// encoding if the file does not contains a different signature.
using (StreamReader reader = new StreamReader(source, Encoding.ASCII, true))
{
// Get the content of the file.
buffer = reader.ReadToEnd();
// Detect the encoding of the source file. Note that we
// can get the encoding only after a read operation is
// performed on the file.
encoding = reader.CurrentEncoding;
}
foreach (object pair in tokenlist)
{
if (pair is DeleteToken)
{
DeleteTokens(ref buffer, (DeleteToken)pair);
}
if (pair is ReplaceBetweenPairToken)
{
ReplaceBetweenTokens(ref buffer, (ReplaceBetweenPairToken)pair);
}
if (pair is ReplacePairToken)
{
ReplaceTokens(ref buffer, (ReplacePairToken)pair);
}
}
File.WriteAllText(destination, buffer, encoding);
}
else
{
File.Copy(source, destination);
}
}