Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.12.2012, 03:05   #1
knesinka
Пользователь
 
Регистрация: 10.11.2011
Сообщений: 14
Печаль RollBack и Commit

Помогите, пожалуйста, разобраться!
Короче есть такой метод (работает правильно):

Код:
Random rand = new Random();
        int i = 1;
        long index = 0;
        long Length = 0;

        public void Write(Structure s, Structure sMain, Array ar)
        {
            StreamWriter wf = new StreamWriter(s.f);
            FileStream f1 = null;
            try
            {
                //if (!File.Exists(@"c:\\" + i + ".txt"))
                if (Length == 0 && index == 0)
                {
                    f1 = new FileStream(@"c:\\" + i + ".txt", FileMode.Create);
                    //f1.SetLength(rand.Next(2, 5));
                    Length = rand.Next(2, 5);
                    index = 0;
                    wf.WriteLine(@"c:\\" + i + ".txt " + Length);
                }
                else
                    f1 = new FileStream(@"c:\\" + i + ".txt", FileMode.Append);
                StreamWriter wf1 = new StreamWriter(f1);
                foreach (var elem in ar)
                {
                    if (index == Length)
                    {
                        wf1.Close();
                        if (!s.listF.Exists(f => f.Name == f1.Name))
                            s.listF.Add(f1);
                        i++;
                        f1 = new FileStream(@"c:\\" + i + ".txt", FileMode.Create);
                        //f1.SetLength(rand.Next(2, 5));
                        Length = rand.Next(2, 5);
                        index = 0;
                        wf.WriteLine(@"c:\\" + i + ".txt " + Length);
                        wf1 = new StreamWriter(f1);
                    }
                        wf1.WriteLine(elem);
                        //f1.Position++;
                        index++;
                }
                if (!s.listF.Exists(f => f.Name == f1.Name))
                    s.listF.Add(f1);
                wf1.Close();
            }
            catch (ArgumentOutOfRangeException)
            {
                RollBack(ref s,sMain);
                throw;
            }
            finally
            {
                wf.Close();
                s.f.Close();
                f1.Close();
            }
        }
нужно к нему написать ещё и Commit c RollBack-ом.

есть вариант, но чет ваще не то:

Код:
[I]public void RollBack(ref Structure sTemp, Structure sMain)
        {
            if (sMain.f != sTemp.f)
                sTemp.f = sMain.f;
            for (int i = 0; i < sTemp.listF.Count(); i++)
            {
                if (sMain.listF.Contains(sTemp.listF[i]))
                {
                    if (sMain.listF[i] != sTemp.listF[i])
                    {
                        FileStream f1 = new FileStream(@"c:\\temp.txt", FileMode.Create);
                        StreamWriter swf1 = new StreamWriter(f1);
                        StreamReader srt = new StreamReader(sTemp.listF[i]);
                        StreamReader srm = new StreamReader(sMain.listF[i]);
                        string st = srt.ReadLine();
                        string sm = srm.ReadLine();
                        while (st == sm)
                        {
                            swf1.WriteLine(st);
                            st = srt.ReadLine();
                            sm = srm.ReadLine();
                        }
                        FileStream ft = new FileStream(@sTemp.listF[i].Name, FileMode.Create);
                        ft = f1;
                        sTemp.listF[i] = sMain.listF;
                    }
                }
                else sTemp.listF.RemoveAt(i);
            }
            //sTemp = sMain; 
        }

        public void Commit(Structure sTemp, ref Structure sMain)
        {
            //sMain.f = sTemp.f;
            //sMain.listF = sTemp.listF;
            sMain = sTemp;
        }
структура:
Код:
public Structure()
        {
            f = null;
            listF = new List<FileStream>();
        }
        public FileStream f;
        public List<FileStream> listF;

Последний раз редактировалось Stilet; 02.12.2012 в 11:47.
knesinka вне форума Ответить с цитированием
Старый 03.12.2012, 10:50   #2
knesinka
Пользователь
 
Регистрация: 10.11.2011
Сообщений: 14
По умолчанию

knesinka вне форума Ответить с цитированием
Старый 03.12.2012, 13:15   #3
knesinka
Пользователь
 
Регистрация: 10.11.2011
Сообщений: 14
По умолчанию

спасибо)) сама справилась!
knesinka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нубовопрос: insert-exec и rollback Ksardas13 SQL, базы данных 0 13.10.2012 17:58
Firebird - множественный Update никак не commit DeveloPerchik БД в Delphi 5 27.07.2012 23:27
svn post commit на форум phpbb men232 PHP 0 29.04.2012 13:03
InterBase - Commit, Rollback SoftKoc БД в Delphi 3 16.12.2010 13:33
Как сделать Commit? Delphi + Ehlib + Firebird. Alexei91 БД в Delphi 3 11.08.2010 10:58