using System;
using System.IO;
using System.Data.OleDb;
class AJefRaskinBuckUp
{
    static void Main(string[] args)
    {
        System.Console.WriteLine("Hi from AJefRaskinBuckUp");
        FileInfo f = new FileInfo(@"C:\E\0.txt");
        f.CopyTo(@"D:\E\0.txt", true);
        AFileCopy();
        FileInfo fi = new FileInfo("C:\\E\\0.txt");
        AFileCopy(fi);
        DirectoryContent();
    }
    static void AFileCopy()
    {
        FileInfo f = new FileInfo(@"C:\E\0.txt");
        f.CopyTo(@"D:\E\0.txt", true);
    }
    static void AFileCopy(FileInfo f)
    {
        string s = ""; //строка для формирования имени
        s = "d:" + "\\" + f.DirectoryName.Substring(3);
        //отрезается имя диска, например "C:\Education" - "c:\" = "Education"
        ATestDir(s);
        s += '\\' + f.Name;
        try
        {
            f.CopyTo(s, true);
        }
        catch (Exception ex) { Console.WriteLine(ex); }
    }
    static void DirectoryContent()
    {
        DirectoryInfo oD = new DirectoryInfo("C:\\E");
        Console.WriteLine("DIR:{0}\n", oD.FullName.ToString());
        foreach (FileInfo f in oD.GetFiles())
        {
            Console.WriteLine("Filename: {0}", f.FullName);
            AFileCopy(f);
        }
        foreach (DirectoryInfo d in oD.GetDirectories())
        {
            AProcessDirs(d);
        }
    } 
    static void ATestDir(string s)
    {
        DirectoryInfo d = new DirectoryInfo(s);
        if (d.Exists) return;
        d.Create();
        return;
    }    
    static void AProcessDirs(DirectoryInfo oD)
    {
        foreach (FileInfo f in oD.GetFiles())
        {
            Console.WriteLine("Filename: {0}", f.FullName);
            AFileCopy(f);
        }
        foreach (DirectoryInfo d in oD.GetDirectories())
        {
            AProcessDirs(d);
        }
    }
    void ASaveBlobToDatabase(FileInfo f)
    {
        byte[] aBLOB;
        FileStream fs = new FileStream(f.FullName, FileMode.Open, FileAccess.Read);
        BinaryReader br = new BinaryReader(fs);
        aBLOB = br.ReadBytes((int)f.Length);
        br.Close();
        fs.Close();
        OleDbConnection aOLEDBConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source = C:\\Users\\sbl17\\Documents\\JR.mdb"); 
        //создать поля для сохранения значений BLOB
        OleDbCommand aSaveDocCommand = new OleDbCommand();
        aSaveDocCommand.Connection = aOLEDBConnection;
        aSaveDocCommand.CommandText = "INSERT INTO tblDocStorage" + "(FileName, DocumentFile)" + "VALUES(@FileName, @DocumentFile)";
        //создать параметры для запоминания имени файла и BLOB данных
        OleDbParameter aFileNameParameter = new OleDbParameter("@FileName", OleDbType.Char);
        OleDbParameter aDocumentFileParameter = new OleDbParameter("@DocumentFile", OleDbType.Binary); 
        aSaveDocCommand.Parameters.Add(aFileNameParameter);
        aSaveDocCommand.Parameters.Add(aDocumentFileParameter);
        //назначить параметру имя файла
        aFileNameParameter.Value = f.Name;
        //назначить BLOB параметру
        aDocumentFileParameter.Value = aBLOB;
        //выполнить команду и сохранить BLOB в базе данных
        try
        {
            aSaveDocCommand.Connection.Open();
            aSaveDocCommand.ExecuteNonQuery();
            Console.WriteLine(aFileNameParameter.Value.ToString() + "сохранен в БД как BLOB Saved!");
        }
        catch (Exception ex)
        { Console.WriteLine(ex.Message + "Сохранение неуспешно:("); }
        finally { aSaveDocCommand.Connection.Close(); }

    }
}