Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 1
Регистрация: 27.03.2016
Сообщений: 41

Ошибка нулевого значения объекта ("System.InvalidOperationException" в mscorlib.dll )

23.04.2016, 11:59. Показов 1337. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.
Вылетает ошибка при запаковке файла GZip'ом. При том нестабильно и нерегулярно. Проверьте плиз на своих машинах:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
using System;
using System.IO;
using System.IO.Compression;
using System.Threading;
 
namespace Compress_Decompress
{
 
    class GZipTest
    {
        static int BufferSize = 2048*2048;   //!!!!!!
 
        const int multithread= 8;//количество потоков
        public static void WriteBlock(GZipStream inStream,int read, byte[] buffer) //запись в архив из входного блока
        {
            try
            {
                Console.Write('-');
                inStream.Write(buffer, 0, read);
            }
            catch (Exception ex)
            {
                Console.WriteLine("ERROR: " + ex.Message);
             //   error = true;
            }
 
        }
 
        public static void WriteBlockCompressed(FileStream inStream, int read, byte[] buffer)//запись архивного блока в выходной файл
        {
            Console.Write('-');
            inStream.Write(buffer, 0, read);
        }
       
        public static void Compress(string inFileName, string outFileName, bool error)//путь к входному файлу, путь к выходному файлу, флаг
        {
            try
            {
                using (FileStream inFile = new FileStream(inFileName, FileMode.Open))//инициализация входного файла
                {
                    using (FileStream comp = new FileStream(outFileName, FileMode.Create, FileAccess.Write))//инициализация выходного файла
                    {
                        //
                        // ПРИ РАБОТЕ С КОНСОЛЬЮ WINDOWS 
                        // ОБЯЗАТЕЛЬНО УКАЗЫВАЕМ ПОЛНЫЙ ПУТЬ И РАСШИРЕНИЕ ДЛЯ ВХОДНЫХ И ВЫХОДНЫХ ФАЙЛОВ!!!! 
                        //
                        using (GZipStream inStream = new GZipStream(comp, CompressionMode.Compress))//буферный поток сжатия
                        {
                            int read = 0;
                            byte[] buffer = new byte[BufferSize];
                            while ((inFile.Length > inFile.Position)||(read!=0))
                            {
                                Thread[] thread = new Thread[multithread];//множим потоки 
                                for (int i = 0; i < multithread; i++)
                                {
                                    read = inFile.Read(buffer, 0, BufferSize);
                                    Console.Write("|{0}", i);//смотрим на флаг смены потоков
                                    thread[i] = new Thread(() =>
                                    WriteBlock(inStream, read, buffer)
                                    );
                                    thread[i].Start();
                                 //   thread[i].Join();
                                }
                          //      thread[multithread].Join();
                               for(int i=0;i<multithread;i++)
                                {
                                    thread[multithread-i-1].Join();
                                }
                            }
                            inStream.Close();  //!!!!!!
 
                        }
                        comp.Close();
                    }                 
                    inFile.Close(); 
                }
                error = false;
                Console.WriteLine(" finished packing. ");
            }
            catch (Exception ex)
            {
                Console.WriteLine("ERROR: " + ex.Message);
                error = true;
            }
        }
 
        public static void Decompress(string inFileName, string outFileName, bool error) //путь к входному файлу, путь к выходному файлу, флаг
        {
            try
            {
                FileStream inFile = new FileStream(inFileName, FileMode.Open, FileAccess.Read);//инициализация входного файла
                {
                    using (GZipStream decomp = new GZipStream(inFile, CompressionMode.Decompress))//инициализация буфера распаковки
                    {
                        //
                        // ПРИ РАБОТЕ С КОНСОЛЬЮ WINDOWS 
                        // ОБЯЗАТЕЛЬНО УКАЗЫВАЕМ ПОЛНЫЙ ПУТЬ И РАСШИРЕНИЕ ДЛЯ ВХОДНЫХ И ВЫХОДНЫХ ФАЙЛОВ!!!! 
                        //
                        using (FileStream outStream = new FileStream(outFileName, FileMode.Create, FileAccess.Write))//инициализация выходного файла
                        {
                            int read;
                            byte[] buffer = new byte[BufferSize];
                            while (inFile.Length > inFile.Position)
                            {
                                Thread[] thread = new Thread[multithread];
                                for (int i = 0; i < multithread; i++)
                                {
                                    read = decomp.Read(buffer, 0, BufferSize);
                                    Console.Write("|{0}", i);//смотрим на флаг смены потоков
                                    thread[i] = new Thread(() =>
                                    WriteBlockCompressed(outStream, read, buffer)
                                    );
                                    thread[i].Start();
                                }
                                foreach (Thread trd in thread)//закрываем все потоки
                                {
                                    trd.Join();
                                }
                            }
                            outStream.Close();
                        }
                        decomp.Close();
                    }
                inFile.Close();
                }
                Console.WriteLine(" finished unpacking. ");
                error = false;
            }
            catch (Exception ex)
            {
                Console.WriteLine("ERROR: " + ex.Message);
                error = true;
            }
        }    
    }
 
    class Program
    {
        static string GZip, fIN, fOUT;
        static bool error = true, 
                     flag = true;
 
        public static void Main(string[] args)//параметры для командной строки должны быть закомментированы для отладки!!!!
        {
            DateTime dold = DateTime.Now;
         /*   try
            {
                GZip = args[0]; //во время работы с консолью  раскомментировать GZip, fIN, fOUT!!!!
                fIN = args[1];
                fOUT = args[2];
            }
            catch (Exception ex)
            {
                Console.WriteLine("ERROR: " + ex.Message+"|| Неверно введены параметры.");
                error = true;
            }*/
 
            try
            { 
                Console.CancelKeyPress += delegate //ловим ctrl+c
                {
                    GC.Collect(); //чистим мусор
                    flag = false;
                };
                while ((true)&(flag))
                {
                    GZip = "compress";          //
                    fIN = "d:/test.avi";        //тестовые значения для отладки!!!!!
                    fOUT = "d:/test.avi.gz";    //
                    if (GZip == "compress")   
                    {
                        Console.WriteLine("packing: ");
                        GZipTest.Compress(fIN, fOUT, error);
                    }
                    else if (GZip == "decompress")
                    {
                        Console.Write("unpacking: ");
                        GZipTest.Decompress(fIN, fOUT, error);
                    }
                    flag = false;
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("ERROR: " + ex.Message);
                error = true;
            }
            TimeSpan sp = DateTime.Now - dold;
            Console.WriteLine("press Enter to terminate! CODE {0}", error ? "1" : "0");
            Console.WriteLine("completed in {0} secs",sp);
            Console.ReadLine();
        }
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.04.2016, 11:59
Ответы с готовыми решениями:

Ошибка: Необработанное исключение типа "System.UnauthorizedAccessException" в mscorlib.dll
static void Main(string args) { File.Create(&quot;c:\\numbers.txt&quot;); for (int i = 0; i &lt; 501;...

Ошибка: Необработанное исключение типа "System.FormatException" в mscorlib.dll
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace...

Ошибка Необработанное исключение типа "System.FormatException" в mscorlib.dll
Совет по устранению: При преобразовании строки в дату выполните синтаксический разбор строки, чтобы получить дату перед помещением каждой...

1
0 / 0 / 1
Регистрация: 27.03.2016
Сообщений: 41
24.04.2016, 14:15  [ТС]
Подправил, но все равно, read обгоняет write, в итоге комп сходит с ума. Приходится поток write закрывать. у меня два ядра . может, в этом дело? (при попытке поставить 2 и более потоков - компьютер начинает болеть)


C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
public static void Compress(string inFileName, string outFileName)//путь к входному файлу, путь к выходному файлу
        {
            try
            {
                using (FileStream inFile = new FileStream(inFileName, FileMode.Open))//инициализация входного файла
                {
                    using (FileStream outFile = new FileStream(outFileName, FileMode.Create, FileAccess.Write))//инициализация выходного файла
                    {
                        //
                        // ПРИ РАБОТЕ С КОНСОЛЬЮ WINDOWS 
                        // ОБЯЗАТЕЛЬНО УКАЗЫВАЕМ ПОЛНЫЙ ПУТЬ И РАСШИРЕНИЕ ДЛЯ ВХОДНЫХ И ВЫХОДНЫХ ФАЙЛОВ!!!! 
                        //
                        using (GZipStream inGZip = new GZipStream(outFile, CompressionMode.Compress))//буферный поток сжатия
                        {
                            int i = 0, j = 0;
                            int[] read = new int[multithread];
                            byte[] buffer = new byte[BufferSize];
                            Thread[] thread = new Thread[multithread];
                            Thread[] thread_ = new Thread[multithread];
                            var mem = new MemoryStream();
                            while ((inFile.Length - inFile.Position) > BufferSize)
                            {
                                for (j = 0; (j < multithread) && ((inFile.Length - inFile.Position) > BufferSize); j++)
                                {
                                    thread[j] = new Thread(() =>
                                    {
                                        read[j] = inFile.Read(buffer, 0, BufferSize);
                                        Console.Write("- {0} -", j);
                                    });
                                    thread[j].Start();
                                    thread[j].Join();
 
                                    thread_[j] = new Thread(() =>
                                    {
                                        inGZip.Write(buffer,0, read[j]);
                                        Console.Write("|");
                                   //     Thread.Sleep(1100);
                                    });
                                    thread_[j].Start();
                                    thread_[j].Join();
 
                                }
                                for (i = 0; i < j; i++)
                                {
                                    thread[i].Join();
                                }
 
                            }
                            inGZip.Write(buffer, 0, inFile.Read(buffer, 0, BufferSize));
                            inGZip.Close();  //!!!!!!
                        }
                        outFile.Close();
 
                    }
                    inFile.Close();
                    error = false;
                    Console.WriteLine(" finished packing. ");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("ERROR: " + ex.Message);
                error = true;
            }
        }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.04.2016, 14:15
Помогаю со студенческими работами здесь

Cannot find type System.MarshalByRefObject in module mscorlib.dll
Создан проект под Windows 8.1 x32 на C#. Выбивает такая ошибка &quot;Cannot find type System.MarshalByRefObject in module mscorlib.dll&quot;....

Ошибка "Необработанное исключение типа "System.ArgumentException" в mscorlib.dll"
Выдаёт ошибку на строке 34 говоря что не верный формат вывода данных, хотя везде проставлен int. using System; using...

Ошибка во внешнем коде ".exception of type 'System.InvalidOperationException' occurred in mscorlib.dll"
Приветствую! Разрабатываю программу для импорта данных из SAP в локальную базу. Методы импорта вынесены в отдельные потоки. Приложение...

Ошибка при закрытии формы "System.ArgumentOutOfRangeException" в mscorlib.dll
Гайз, нужна помощь. Гугл не помог, вся надежда на вас. Офк есть подозрения что проблема настолько в базовых вещах, что я просто туплю и...

Необработанное исключение типа "System.InvalidOperationException" в System.Data.dll
В программировании нуб. Помогите исправить ошибку. Делал всё по видео-уроку. Но почему то при заполнении id и name, выдаёт: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru