Нехватка места на диске System.Runtime.InteropServices

244
19 мая 2018, 10:40

Стала появляться следующая ошибка после переустановки с win7 на win10 :

в EDIService1CConvert.Watcher.ConvertTxtToExcel() в C:\Users\выаы\source\repos\EDIService1CConvert\EDIService1CConvert\Watcher.cs:строка 138, имя метода - ConvertTxtToExcel [15.05.2018 10:24:35.370] [Microsoft.Office.Interop.Excel.Workbooks.Add()] System.Runtime.InteropServices.COMException (0x800A03EC): Приложению Microsoft Excel не удается открыть или сохранить документы из-за нехватки памяти или места на диске.

• Чтобы освободить память, закройте ненужные книги или программы.

• Чтобы освободить место на диске, удалите с этого диска ненужные файлы. в Microsoft.Office.Interop.Excel.Workbooks.Add(Object Template)

Конверт происходит на диск D.

Вот код метода:

private void ConvertTxtToExcel()
{
    Application excelApp = null;
    Worksheet workSheet = null;
    try
    {
        //Список файлов
        string[] files = Directory.GetFiles(pathToTxt);
        if (files.Length >= 1)
        {
            //Получаем самый свежий
            string file = files.OrderByDescending(x => File.GetCreationTime(x)).First();
            //Колво строк в txt
            var lines = File.ReadAllLines(file, Encoding.Default);
            //Проверка на колво столбцов в файле
            int checkFileFormat = lines[0].Split('\t').Length;
            if (checkFileFormat == 5)
            {
                //excel app
                excelApp = new Application();
                //Путь к excel файлу
                string pathToXlsFile = String.Concat(pathToTxt, paths[0], @"MANPriceResult.xls");
                //Проверка на существоаания, прайс всегда должен быть один
                if (File.Exists(pathToXlsFile))
                {
                    string path = String.Format("{0}{1}MANPriceResult_{2:dd_MM_yyy_HH_mm_ss_ff}.xls", pathToTxt, paths[1], DateTime.Now); 
                    File.Move(pathToXlsFile, path);
                }
                //Настройка книги
                excelApp.Workbooks.Add();
                workSheet = (Worksheet)excelApp.ActiveSheet;
                workSheet.Cells[1, 1] = "ID";
                workSheet.Cells[1, 2] = "Catalog";
                workSheet.Cells[1, 3] = "Code";
                workSheet.Cells[1, 4] = "PartName";
                workSheet.Cells[1, 5] = "Price";
                workSheet.Cells[1, 6] = "Percent";
                int row = 1;
                Log.Write(null, "Старт создания файла, ожидайте..");
                int temp = 0;
                foreach (var line in lines)
                {
                    //Вычисляем процент выполнения для файла с логами
                    int resultPercent = row * 100 / lines.Length;
                    if (resultPercent % 10 == 0 && resultPercent != temp)
                    {
                        temp = resultPercent;
                        Log.Write(null, String.Format("Завершено {0}%, пройдено {1} строк.", resultPercent, row));
                    }
                    if (row > 1)
                    {
                        //Разделения столбцов в txt по символу табуляции
                        var values = line.Split('\t');
                        for (int i = 0; i < values.Length; i++)
                        {
                            //заполняем строку
                            workSheet.Cells[row, i + 1] = values[i];
                            //Парсим процент скидки из поля с наименованием
                            if(i == 3)
                            {
                                if(values[i].Contains("ЗНИЖКА"))
                                {
                                    string result = "";
                                    foreach (var item in values[i].ToCharArray())
                                    {
                                        if(Char.IsDigit(item))
                                        {
                                            result += item;
                                        }
                                    }
                                    workSheet.Cells[row, 6] = result;
                                }
                            }
                        }
                    }
                    row++;
                }
                workSheet.SaveAs(pathToXlsFile);
                excelApp.Workbooks.Close();
                excelApp.Quit();
                //Оповещаем об успешном создании нового файла
                Log.Write(null, String.Format("Файл {0} успешно создан", pathToXlsFile));
                Attachment attachment = new Attachment(pathToXlsFile);
                email.sendEmailLetter("Поступил новый файл", "Поступил новый файл на сервер. Проект EDI.", attachment);
                //Обунляем попытки
                countTries = 0;
                //Архивируем текстовые файлы
                foreach (var item in files)
                {
                    string path = String.Format("{0}{1}TXTBackLog_{2:dd_MM_yyy_HH_mm_ss_ff}.txt", pathToTxt, paths[2], DateTime.Now);
                    File.Move(item, path);
                }
            }
            else
            {
                throw new Exception("Ошибка формата файла");
            }
        }
    }
    catch (Exception ex)
    {
        Log.Write(ex, "ConvertTxtToExcel");
        if (countTries == 0)
            email.sendEmailLetter("Ошибка конвертации", String.Format("Ошибка с получением файла MANPrice. Посмотрите логи по адресу {0}Logs", pathToTxt),null,true);
        //Если ошибка связана с занятостью файла, повторяем попытку через 3 секунды, всего попыток 3.
        if (ex is IOException)
        {
            if(countTries < 3)
            {
                countTries++;
                Log.Write(null, "В связи с ошибкой доступа, повторяем попытку. Попытка номер - " + countTries);
                Thread.Sleep(3000);
                ConvertTxtToExcel();
            }
        }
    }
    finally
    {
        GC.Collect();
        GC.WaitForPendingFinalizers();
        if (workSheet != null) Marshal.ReleaseComObject(workSheet);
        if (excelApp != null) Marshal.ReleaseComObject(excelApp);
    }
}  

С чем может быть связана ошибка?

READ ALSO
Binding вложенному свойству

Binding вложенному свойству

Приведу пример кода:

223
С# Удалить блок текста заключенный в фигурные скобки с условием

С# Удалить блок текста заключенный в фигурные скобки с условием

Есть лог файл в json форматеМне необходимо удалить лишние строки заключенные в фигурные скобки в которых есть "processName": "GM_Scheduler"

251
Аутентификация сторонних сервисов

Аутентификация сторонних сервисов

Всем привет, у меня имеется клиент серверное приложение на приложение на Aspnet core помимо основного проекта, появилась необходимость добавить...

232