Beispiel #1
0
        public virtual void UntokenFile(string source, string destination)
        {
            if (string.IsNullOrEmpty(source))
            {
                throw new ArgumentNullException("source");
            }

            if (string.IsNullOrEmpty(destination))
            {
                throw new ArgumentNullException("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);
            }
        }