anchor.diff:            fs1.Read(one, 0, BYTES_TO_READ) |> ignore
             fs2.Read(two, 0, BYTES_TO_READ) |> ignore
   
  -          if one <> two then
  -             eq <- false
  +          if one <> two then eq <- false
   
       eq
  -
   
   /// Converts a file to it's full file system name
   let FullName fileName = (new FileInfo(fileName)).FullName
  
positive.code: ///   param target: The targetDirectory
  ///   param file: The fileName
  let CopyFileIntoSubFolder target file =
    let relative = (toRelativePath file).TrimStart('.')
    let fi = new FileInfo(file)
    
    let targetName = target + relative
    let target = new FileInfo(targetName)
    if not target.Directory.Exists then
      target.Directory.Create()
    logVerbosefn "Copy %s to %s" file targetName
    fi.CopyTo(targetName,true) |> ignore    
  
  /// Copies a single file to the target
  ///   param target: The target directory.
  
negative.code: 
  /// Sets the directory readonly 
  let setDirectoryReadOnly readOnly (dir:DirectoryInfo) = 
      if dir.Exists then
          let isReadOnly = dir.Attributes &&& FileAttributes.ReadOnly = FileAttributes.ReadOnly
          if readOnly && (not isReadOnly) then 
              dir.Attributes <- dir.Attributes ||| FileAttributes.ReadOnly
          if (not readOnly) && not isReadOnly then               
              dir.Attributes <- dir.Attributes &&& (~~~FileAttributes.ReadOnly)  
  
  /// Sets all files in the directory readonly 
  let rec SetDirReadOnly readOnly (dir:DirectoryInfo) =
      dir.GetDirectories() |> Seq.iter (fun dir ->
          SetDirReadOnly readOnly dir
          setDirectoryReadOnly readOnly dir)
      dir.GetFiles() |> Seq.iter (fun file -> file.IsReadOnly <- readOnly)    
    
  /// Sets all files in the directory readonly 
  let SetReadOnly readOnly (files: string seq) =
      files |> Seq.iter (fun file ->
        let fi = new FileInfo(file)
        if fi.Exists then 
            fi.IsReadOnly <- readOnly
        else
            let di = new DirectoryInfo(file)
            setDirectoryReadOnly readOnly di)
        
        
  /// Deletes a directory if it exists
  let DeleteDir x =   
      let dir = new DirectoryInfo(x)    
      if dir.Exists then 
          // set all files readonly = false
          !+ "/**/*.*"
            |> SetBaseDir dir.FullName
            |> Scan
            |> (SetReadOnly false)
        
          logfn "Deleting %s" dir.FullName
          dir.Delete true
      else
        logfn "%s does not exist." dir.FullName
      
  /// Creates a directory if it does not exist
  let CreateDir x =   
      let dir = new DirectoryInfo(x)
      if not dir.Exists then 
         logfn "Creating %s" dir.FullName
         dir.Create()
      else
         logfn "%s does already exist." dir.FullName
      
  /// Creates a file if it does not exist
  let CreateFile x =   
      let file = new FileInfo(x)
      if not file.Exists then 
          logfn "Creating %s" file.FullName
          let newFile = file.Create()
          newFile.Close()
      else
          logfn "%s does already exist." file.FullName
      
  /// Deletes a file if it exist
  let DeleteFile x =   
      let file = new FileInfo(x)    
      if file.Exists then 
          logfn "Deleting %s" file.FullName
          file.Delete()
      else
          logfn "%s does not exist." file.FullName                
      
  let (|File|Directory|) (fileSysInfo : FileSystemInfo) =
      match fileSysInfo with
      | :? FileInfo as file -> File (file.Name)
      | :? DirectoryInfo as dir -> Directory (dir.Name, seq { for x in dir.GetFileSystemInfos() -> x })
      | _ -> failwith "No file or directory given."      
        
  /// Active Pattern for determining file extension
  let (|EndsWith|_|) extension (file : string) = if file.EndsWith extension then Some() else None
   
  /// Active Pattern for determining file name   
  let (|FileInfoFullName|) (f:FileInfo) = f.FullName
  