Форум программистов, компьютерный форум, киберфорум
C#: ASP.NET MVC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
2 / 2 / 1
Регистрация: 04.01.2018
Сообщений: 24

System.StackOverflowException при работе с любыми файлами

20.08.2018, 21:50. Показов 2646. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
При работе с файлами в каких-то методах появляется исключение System.StackOverflowException.

Попробовал:
C#
1
2
3
4
using (StreamReader sr = new StreamReader(iconDirectorys[i].FullName + "\\Other data.txt"))//Тут
{
       strFile = sr.ReadToEnd();
}
Исключение...

Пробовал:
C#
1
2
XmlDocument doc = new XmlDocument();
doc.Load(iconDirectorys[i].FullName + "\\Other data.xml");//Тут
Исключение...

Cейчас запустил
C#
1
Directory.Exists(Path + "Data\\Desktop\\Icons")
выдал исключение(до этого спокойно существовал и работал)

Что может служить этому причиной?

Добавлено через 2 минуты
Проверял, когда все файлы и папки существовали. Не работает(
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.08.2018, 21:50
Ответы с готовыми решениями:

Ошибка System.StackOverflowException
нужна срочная помощь - делал по примеру http://metanit.com/sharp/mvc/5.1.php ) Модели и БД и Подключение к базе данных. Только 2 пункта ...

Как отключить диалог при работе с док файлами?
Делую прогу. Из БД выбираю инфу и формирую MS Word-овский (rtf) документ (подсмотрел у MS). В MS примере вывод док-та происхоит по команде ...

Ошибка System.StackOverflowException при использовании StreamReader
У меня есть метод, которой получает два числа из файла: protected void GetNumbers() { using (StreamReader...

8
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
20.08.2018, 21:59
Цитата Сообщение от Vladislav141 Посмотреть сообщение
Что может служить этому причиной?
Глубокая рекурсия
1
2 / 2 / 1
Регистрация: 04.01.2018
Сообщений: 24
20.08.2018, 23:01  [ТС]
Глубокая рекурсия где? В методах, например, Directory.Exists? Или у меня в коде?
У меня все в одном методе, а сам метод изнутри не вызываю)
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
public Icon[] Icons
        {
            get
            {
                if (Directory.Exists(Path + "Data\\Desktop\\Icons"))
                {
                    DirectoryInfo[] iconDirectorys = new DirectoryInfo(this.Path + "Data\\Desktop\\Icons").GetDirectories();
                    for (int i = 0; i < iconDirectorys.Length; i++)
                    {
                        for (int j = 0; j < iconDirectorys.Length - 1; j++)
                        {
                            if (needToReOrder(iconDirectorys[j].Name, iconDirectorys[j + 1].Name))
                            {
                                var s = iconDirectorys[j];
                                iconDirectorys[j] = iconDirectorys[j + 1];
                                iconDirectorys[j + 1] = s;
                            }
                        }
                    }
                    Icon[] icons = new Icon[iconDirectorys.Length];
                    for (int i = 0; i < iconDirectorys.Length; i++)
                    {
                        if (File.Exists(iconDirectorys[i].FullName + "\\Other data.txt"))
                        {
                            string header = null;
                            string href = null;
                            string strFile = null;
                            using (StreamReader sr = new StreamReader(iconDirectorys[i].FullName + "\\Other data.txt"))
                            {
                                strFile = sr.ReadToEnd();
                            }
                            string[] values = strFile.Split('~');
                            header = values[0];
                            href = values[1];
                            Log log = new Log();
                            if (Directory.Exists(iconDirectorys[i].FullName + "\\Log"))
                            {
                                FileInfo[] files = new DirectoryInfo(iconDirectorys[i].FullName + "\\Log").GetFiles();
                                LogItem[] items = new LogItem[files.Length];
                                for (int g = 0; g < files.Length; g++)
                                {
                                    items[g] = new LogItem
                                    {
                                        Time = files[g].CreationTime,
                                        Action = File.ReadAllText(files[g].FullName)
                                    };
                                }
                                log.Items = items;
                            }
                            else
                            {
                                Directory.CreateDirectory(iconDirectorys[i].FullName + "\\Log");
                            }
                            icons[i] = new Icon()
                            {
                                Path = iconDirectorys[i].FullName,
                                Header = header == null ? throw new Exception("Нет header'a") : header,
                                Href = href == null ? throw new Exception("Нет href'a") : href,
                                Log = log,
                                ImagePath = iconDirectorys[i].FullName + "\\Image",
                            };
                        }
                        else
                        {
                            if (OtherDateIsNotExist != null)
                            {
                                OtherDateIsNotExist(this, new IsNotExistArgs(iconDirectorys[i].FullName + "\\Other data.txt"));
                            }
                            else
                            {
                                throw new IsNotExistException(iconDirectorys[i].FullName + "\\Other data.txt", "Other data.txt не существует.\nЧтобы заменить исключение нужно обработать событие OtherDateIsNotExist в классе IconCollection");
                            }
                        }
                    }
                    int[] indexesInt32 = null;
                    if (File.Exists(this.Path + "Data\\Desktop\\Icons\\indexis.txt"))
                    {
                        string fileText = File.ReadAllText(this.Path + "Data\\Desktop\\Icons\\indexis.txt");
                        string[] indexes = fileText.Split(' ');
                        if (indexes.Length != iconDirectorys.Length)
                        {
                            throw new Exception("Количество индексированых иконок меньше чем количество самих иконок. Индексировано должно быть все.");
                        }
                        indexesInt32 = new int[indexes.Length];
                        for (int i = 0; i < indexes.Length; i++)
                        {
                            indexesInt32[i] = Convert.ToInt32(indexes[i]);
                        }
                    }
                    else
                    {
                        throw new IsNotExistException(this.Path + "Data\\Desktop\\Icons\\indexis.xml", "Файлы indexis.xml, который индексирует ячейки, не существует");
                    }
                    Icon[] sortedIcons = new Icon[indexesInt32.Length];
                    for (int i = 0; i < indexesInt32.Length; i++)
                    {
                        sortedIcons[i] = Icons[indexesInt32[i]];
                    }
                    return sortedIcons;
                }
                else
                {
                    Directory.CreateDirectory(this.Path + "Data\\Desktop\\Icons");
                    return new Icon[0];
                }
            }
        }


Добавлено через 10 минут
То, что вызывает:
C#
1
2
3
4
5
6
                    public void Add(object sender,RoutedEventArgs e)
        {
            //for (int i = 0; i < 10; i++)
            //    collection.AddIcon(new Icon() { Href = "dfgsdg", Header = i.ToString(), Log = null, ImagePath = "C:\\Users\\XXX\\Desktop\\Icon.png" });
            Icon[] icons = collection.Icons;
        }
0
 Аватар для sau
2773 / 2073 / 386
Регистрация: 22.07.2011
Сообщений: 7,820
21.08.2018, 00:52
Вы детали исключения лучше покажите , там стэк вызовов должен быть , возможно еще какой метод вызывается в рекурсии.
Что например внутри needToReOrder ? - и т.п.

Добавлено через 3 минуты
П.С И вообще , поменьше скобок , невозможно читать.
0
2 / 2 / 1
Регистрация: 04.01.2018
Сообщений: 24
21.08.2018, 02:05  [ТС]
static bool needToReOrder(string s1, string s2) нужен для сортировки

C#
1
2
3
4
5
6
7
        
protected static bool needToReOrder(string s1, string s2)
        {
            if (Convert.ToInt32(s1) < Convert.ToInt32(s2)) return false;
            if (Convert.ToInt32(s1) > Convert.ToInt32(s2)) return true;
            return false;
        }
Добавлено через 22 минуты
Тут немного жесть)

Со стеком вызовов тоже странности. Если я при открытом окошечке стека вызовов и при отладке нажимаю f11, то работает, но как только продолжу до возвращения окончательного результата перебрасывает в начало Directory.Exist() и тут исключение/

Посмотрел стек вызовов. Первый раз пользуюсь)
return Icons; - тут зациклен. Это 121 строка. Но цикла нету)
После цикла возвращается в начало метода. на 29 строке if(File.Exist()), который выбросит исключение


[Внешний код]
> DataLibrary.dll!DataLibrary.IconCollecti on.Icons.get()Строка 29 C#
DataLibrary.dll!DataLibrary.IconCollecti on.Icons.get()Строка 121 C#
DataLibrary.dll!DataLibrary.IconCollecti on.Icons.get()Строка 121 C#
DataLibrary.dll!DataLibrary.IconCollecti on.Icons.get()Строка 121 C#

Еще много)

DataLibrary.dll!DataLibrary.IconCollecti on.Icons.get()Строка 121 C#
DataLibrary.dll!DataLibrary.IconCollecti on.Icons.get()Строка 121 C#
DataLibrary.dll!DataLibrary.IconCollecti on.Icons.get()Строка 121 C#
Core.dll!Core.DesktopCore.Add(object sender, System.Windows.RoutedEventArgs e)Строка 25 C#
MyDesktop.exe!MyDesktop.MainWindow.AddIc on_Click(object sender, System.Windows.RoutedEventArgs e)Строка 65 C#
[Внешний код]

Добавлено через 5 минут
Своей тупостью сломал CLR)

Добавлено через 1 минуту
Цитата Сообщение от nicolas2008 Посмотреть сообщение
Глубокая рекурсия
Самой среды)

Добавлено через 8 минут
Скрин исключения с окошком стека вызовов

Скрин исключения с окошком стека вызовов


Добавлено через 4 минуты
Мене удалить решение?)

Добавлено через 13 минут
В параметрах исключения StackTrace равен null
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,569
21.08.2018, 02:42
C#
1
2
3
public Icon[] Icons
...
   sortedIcons[i] = Icons[indexesInt32[i]];
вызов свойства из самого свойства...
0
2 / 2 / 1
Регистрация: 04.01.2018
Сообщений: 24
21.08.2018, 02:58  [ТС]
Я закоментировал также

Добавлено через 57 секунд
На этом скриншоте можете видеть
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,569
21.08.2018, 03:09
Лучший ответ Сообщение было отмечено Vladislav141 как решение

Решение

C#
1
return Icons;
это по вашему что не вызов свойства из свойства, который вызывает Stack Overflow?
1
2 / 2 / 1
Регистрация: 04.01.2018
Сообщений: 24
21.08.2018, 03:18  [ТС]
Актуальный код. Нельзя на форуме изменять сообщения старше n-минут(забыл)
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
protected static bool needToReOrder(string s1, string s2)
        {
            if (Convert.ToInt32(s1) < Convert.ToInt32(s2)) return false;
            if (Convert.ToInt32(s1) > Convert.ToInt32(s2)) return true;
            return false;
        }
        public Icon[] Icons
        {
            get
            {
                if (Directory.Exists(Path + "Data\\Desktop\\Icons"))
                {
                    DirectoryInfo[] iconDirectorys = new DirectoryInfo(this.Path + "Data\\Desktop\\Icons").GetDirectories();
                    for (int i = 0; i < iconDirectorys.Length; i++)
                    {
                        for (int j = 0; j < iconDirectorys.Length - 1; j++)
                        {
                            if (needToReOrder(iconDirectorys[j].Name, iconDirectorys[j + 1].Name))
                            {
                                var s = iconDirectorys[j];
                                iconDirectorys[j] = iconDirectorys[j + 1];
                                iconDirectorys[j + 1] = s;
                            }
                        }
                    }
                    Icon[] icons = new Icon[iconDirectorys.Length];
                    for (int i = 0; i < iconDirectorys.Length; i++)
                    {
                        if (File.Exists(iconDirectorys[i].FullName + "\\Other data.txt"))
                        {
                            string header = null;
                            string href = null;
                            string strFile = null;
                            using (StreamReader sr = new StreamReader(iconDirectorys[i].FullName + "\\Other data.txt"))
                            {
                                strFile = sr.ReadToEnd();
                            }
                            string[] values = strFile.Split('~');
                            header = values[0];
                            href = values[1];
                            Log log = new Log();
                            if (Directory.Exists(iconDirectorys[i].FullName + "\\Log"))
                            {
                                FileInfo[] files = new DirectoryInfo(iconDirectorys[i].FullName + "\\Log").GetFiles();
                                LogItem[] items = new LogItem[files.Length];
                                for (int g = 0; g < files.Length; g++)
                                {
                                    items[g] = new LogItem
                                    {
                                        Time = files[g].CreationTime,
                                        Action = File.ReadAllText(files[g].FullName)
                                    };
                                }
                                log.Items = items;
                            }
                            else
                            {
                                Directory.CreateDirectory(iconDirectorys[i].FullName + "\\Log");
                            }
                            icons[i] = new Icon()
                            {
                                Path = iconDirectorys[i].FullName,
                                Header = header == null ? throw new Exception("Нет header'a") : header,
                                Href = href == null ? throw new Exception("Нет href'a") : href,
                                Log = log,
                                ImagePath = iconDirectorys[i].FullName + "\\Image",
                            };
                        }
                        else
                        {
                            if (OtherDateIsNotExist != null)
                            {
                                OtherDateIsNotExist(this, new IsNotExistArgs(iconDirectorys[i].FullName + "\\Other data.txt"));
                            }
                            else
                            {
                                throw new IsNotExistException(iconDirectorys[i].FullName + "\\Other data.txt", "Other data.txt не существует.\nЧтобы заменить исключение нужно обработать событие OtherDateIsNotExist в классе IconCollection");
                            }
                        }
                    }
                    int[] indexesInt32 = null;
                    if (File.Exists(this.Path + "Data\\Desktop\\Icons\\indexis.txt"))
                    {
                        string fileText = File.ReadAllText(this.Path + "Data\\Desktop\\Icons\\indexis.txt");
                        string[] indexes = fileText.Split(' ');
                        if (indexes.Length != iconDirectorys.Length)
                        {
                            throw new Exception("Количество индексированых иконок меньше чем количество самих иконок. Индексировано должно быть все.");
                        }
                        indexesInt32 = new int[indexes.Length];
                        for (int i = 0; i < indexes.Length; i++)
                        {
                            indexesInt32[i] = Convert.ToInt32(indexes[i]);
                        }
                    }
                    else
                    {
                        throw new IsNotExistException(this.Path + "Data\\Desktop\\Icons\\indexis.xml", "Файлы indexis.xml, который индексирует ячейки, не существует");
                    }
                    //Icon[] sortedIcons = new Icon[indexesInt32.Length];
                    //for (int i = 0; i < indexesInt32.Length; i++)
                    //{
                    //    sortedIcons[i] = Icons[indexesInt32[i]];
                    //}
                    return Icons;
                }
                else
                {
                    Directory.CreateDirectory(this.Path + "Data\\Desktop\\Icons");
                    return new Icon[0];
                }
            }
        }
Добавлено через 2 минуты
И причиной удаления послужила не ошибка, которую я увидел, а то, что я попросту забил на сортировку.

Добавлено через 5 минут
Спасибо! Одна опечатка и нарушила весь механизм. Сразу не понял). Огромное спасибо) Думал что локальную переменную возвращаю)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.08.2018, 03:18
Помогаю со студенческими работами здесь

Исключение StackOverflowException при работе с MySQL
Здравствуйте, подскажите пожалуйста, через некоторое время программы вылетает ошибка &quot;System.StackOverflowException&quot; вот...

При создании объекта возникает ошибка System.StackOverflowException
Я создал интерфейс, interface myProgramm { void systemCommand(string type); } а от него унаследовал...

Как исправить исключение System.StackOverflowException в System.Drawing.dll
An unhandled exception of type 'System.StackOverflowException' occurred in System.Drawing.dll что делать все работала нормально и...

System.ArgumentException в System.Drawing.dll при работе с Gif
Необработанное исключение типа &quot;System.ArgumentException&quot; произошло в System.Drawing.dll using System; using...

System.StackOverflowException при обращении к элементу главной формы из дочерней формы
При закрытии дочерней формы (client) необходимо обратиться к элементу listView1 главной формы (server). // Тут в форме server создаю...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД 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 . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru