public ShadowNodeContent(ShadowFile shadowFile, IFile file, IFileSystem tempFileSystem)
        {
            var buffer = new StringBuilder(file.Address.Uri.Length * 3);

            this.shadowFile     = shadowFile;
            this.tempFileSystem = tempFileSystem;
            this.file           = tempFileSystem.ResolveFile(GenerateName());

            buffer.Append(ComputeHash(file.Address.Uri).TrimRight('='));

            var value = (string)file.Address.QueryValues["length"];

            if (value != null)
            {
                this.targetLength = Convert.ToInt64(value);

                buffer.Append('_').Append(value);
            }

            value = (string)file.Address.QueryValues["md5sum"];

            if (value != null)
            {
                this.targetMd5 = Convert.FromBase64String(value);

                buffer.Append('_').Append(value);
            }

            value = (string)file.Address.QueryValues["creationtime"];

            if (value != null)
            {
                this.hasCreationTime = true;
                this.creationTime    = Convert.ToDateTime(value);

                buffer.Append('_').Append(this.creationTime.Ticks.ToString());
            }

            value = (string)file.Address.QueryValues["writetime"];

            if (value != null)
            {
                this.hasLastWriteTime = true;
                this.lastWriteTime    = Convert.ToDateTime(value);

                buffer.Append('_').Append(this.lastWriteTime.Ticks.ToString());
            }

            value = buffer.ToString();
        }
		public ShadowNodeContent(ShadowFile shadowFile, IFile file, IFileSystem tempFileSystem)
		{
			var buffer = new StringBuilder(file.Address.Uri.Length * 3);

			this.shadowFile = shadowFile;
			this.tempFileSystem = tempFileSystem;
			this.file = tempFileSystem.ResolveFile(GenerateName());

			buffer.Append(ComputeHash(file.Address.Uri).TrimRight('='));

			var value = (string)file.Address.QueryValues["length"];

			if (value != null)
			{
				this.targetLength = Convert.ToInt64(value);
				
				buffer.Append('_').Append(value);
			}

			value = (string)file.Address.QueryValues["md5sum"];

			if (value != null)
			{
				this.targetMd5 = Convert.FromBase64String(value);

				buffer.Append('_').Append(value);
			}

			value = (string)file.Address.QueryValues["creationtime"];

			if (value != null)
			{
				this.hasCreationTime = true;
				this.creationTime = Convert.ToDateTime(value);

				buffer.Append('_').Append(this.creationTime.Ticks.ToString());
			}

			value = (string)file.Address.QueryValues["writetime"];

			if (value != null)
			{
				this.hasLastWriteTime = true;
				this.lastWriteTime = Convert.ToDateTime(value);

				buffer.Append('_').Append(this.lastWriteTime.Ticks.ToString());
			}

			value = buffer.ToString();
		}