Mosaic raster datasets to a file raster format
CreateFileRasterMosaic.cs
// Copyright 2012 ESRI
// 
// All rights reserved under the copyright laws of the United States
// and applicable international laws, treaties, and conventions.
// 
// You may freely redistribute and use this sample code, with or
// without modification, provided you include the original copyright
// notice and use restrictions.
// 
// See the use restrictions.
// 

using System;
using Microsoft.Win32;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.DataSourcesRaster;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.DataManagementTools;
using ESRI.ArcGIS.Geoprocessor;
using ESRI.ArcGIS.Geoprocessing;
using ESRI.ArcGIS.DataSourcesGDB;

namespace CreateFileRasterMosaic
{
    //Sample creating a file raster mosaic from rasters in a folder and its subfolders
    //Steps:
    //  1. Create an unmanaged PGDB raster catalog
    //  2. Load rasters in the input folder and its subfolders to the new raster catalog
    //  3. Create a mosaic file raster dataset from the unmanaged raster catalog

    class CreateFileRasterMosaic
    {
        //Local variables for data path
        //The TEMP directory will be used to create temporary raster catalog and output raster dataset
        //Remove temp.mdb in TEMP directory if it exists
        //You can substitute the paths with your data location

        static string inputFolder = @"C:\data";
        static string outputFolder = @"C:\Temp";
        static string outputName = "mosaic.tif";
        static string tempRasterCatalog = "temp_rc";
        static string tempPGDB = "temp.mdb";
        static string tempPGDBPath = outputFolder + "\\" + tempPGDB;
        static string tempRasterCatalogPath = tempPGDBPath + "\\" + tempRasterCatalog;

        static void Main(string[] args)
        {
            ESRI.ArcGIS.esriSystem.AoInitialize aoInit = null;
            try
            {
                ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Desktop);
                aoInit = new AoInitializeClass();
                esriLicenseStatus licStatus = aoInit.Initialize(esriLicenseProductCode.esriLicenseProductCodeBasic);
                Console.WriteLine("License Checkout successful.");
            }
            catch (Exception exc)
            {
                // If it fails at this point, shutdown the test and ignore any subsequent errors.
                Console.WriteLine(exc.Message);
            }

            try
            {
                //Create temporary unmanaged raster catalog and load all rasters
                CreateUnmanagedRasterCatalog();

                //Open raster catalog
                IRasterWorkspaceEx rasterWorkspaceEx = (IRasterWorkspaceEx)OpenRasterPGDBWorkspace(tempPGDBPath);
                IRasterCatalog rasterCatalog = rasterWorkspaceEx.OpenRasterCatalog(tempRasterCatalog);

                //Mosaic rasters in the raster catalog
                Mosaic(rasterCatalog);
            }
            catch (Exception exc)
            {
                Console.WriteLine(exc.Message);
            }

            Console.Write("Please press any key to close the application.");
            Console.ReadKey();

            //Do not make any call to ArcObjects after ShutDown() call
            aoInit.Shutdown();
        }

        static void CreateUnmanagedRasterCatalog()
        {
            try
            {
                //Use geoprocessing to create the geodatabase, the raster catalog, and load our directory
                //to the raster catalog.
                Geoprocessor geoprocessor = new Geoprocessor();

                //Create personal GDB in the TEMP directory
                CreatePersonalGDB createPersonalGDB = new CreatePersonalGDB();
                createPersonalGDB.out_folder_path = outputFolder;
                createPersonalGDB.out_name = tempPGDB;

                geoprocessor.Execute(createPersonalGDB, null);

                //Create an unmanaged raster catalog in the newly created personal GDB
                CreateRasterCatalog createRasterCatalog = new CreateRasterCatalog();

                createRasterCatalog.out_path = tempPGDBPath;
                createRasterCatalog.out_name = tempRasterCatalog;
                createRasterCatalog.raster_management_type = "unmanaged";

                geoprocessor.Execute(createRasterCatalog, null);

                //Load data into the unmanaged raster catalog
                WorkspaceToRasterCatalog wsToRasterCatalog = new WorkspaceToRasterCatalog();

                wsToRasterCatalog.in_raster_catalog = tempRasterCatalogPath;
                wsToRasterCatalog.in_workspace = inputFolder;
                wsToRasterCatalog.include_subdirectories = "INCLUDE_SUBDIRECTORIES";

                geoprocessor.Execute(wsToRasterCatalog, null);
            }
            catch (Exception exc)
            {
                Console.WriteLine(exc.Message);
            }
        }

        static void Mosaic(IRasterCatalog rasterCatalog)
        {
            try
            {
                //Mosaics all rasters in the raster catalog to an output raster dataset
                IMosaicRaster mosaicRaster = new MosaicRasterClass();
                mosaicRaster.RasterCatalog = rasterCatalog;

                //Set mosaicking options, you may not need to set these for your data
                mosaicRaster.MosaicColormapMode = rstMosaicColormapMode.MM_MATCH;
                mosaicRaster.MosaicOperatorType = rstMosaicOperatorType.MT_LAST;

                //Open output workspace
                IWorkspaceFactory workspaceFactory = new RasterWorkspaceFactoryClass();
                IWorkspace workspace = workspaceFactory.OpenFromFile(outputFolder, 0);

                //Save out to a target raster dataset
                //It can be saved to TIFF, IMG, GRID, BMP, GIF, JPEG2000, JPEG, Geodatabase, ect.
                ISaveAs saveas = (ISaveAs)mosaicRaster;
                saveas.SaveAs(outputName, workspace, "TIFF");
            }
            catch (Exception exc)
            {
                Console.WriteLine(exc.Message);
            }
        }

        static IWorkspace OpenRasterPGDBWorkspace(string connStr)
        {
            Type t = Type.GetTypeFromProgID("esriDataSourcesGDB.AccessWorkspaceFactory");
            System.Object obj = Activator.CreateInstance(t);
            IWorkspaceFactory2 workspaceFactory = obj as IWorkspaceFactory2;
            return workspaceFactory.OpenFromFile(connStr, 0);
        }
    }
}