| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > .NET для новичков > Программа на стороннем компьютере выдает ошибку |
| Автор: okaton 19.10.2007, 16:53 | ||
| Доброго времени суток. У меня возникла проблема (большая). Я собрал программу, на моей машине работает прекрасно. А вот на других (framework 2 установлен) не работает. И выдает (The END - название формы): ![]() где Details это:
Что это я не "очень" понимаю (если честно вобще не понимаю) Помогите мне разобраться пожалуйсто, а то я уже с ума схожу |
| Автор: Experimenter 19.10.2007, 17:29 |
| Привет! Во-первых, делаешь ли ты обертки try-catch в своем коде? Если сделаешь, то можно легко локализовать тот участок, где вызывается данное исключение. Из данного сообщения можно лишь понять, что где-то ты выходишь за рамки заданного тобой массива. Конкретнее сказать невозможно. |
| Автор: okaton 19.10.2007, 17:45 |
| Experimenter, Привет! try-catch не использовал. А почему я не выхожу за границы массива, на машине где установлен c#? Добавлено через 8 минут и 8 секунд А как работать с try-catch (если не сложно)? |
| Автор: Experimenter 19.10.2007, 18:34 | ||
Увидишь даже номер строки, где ошибка произошла (если она произошла). З.Ы. Если только по массиву отследить нужно, то тогда конечно catch (IndexOutOfRangeException ex) |
| Автор: okaton 19.10.2007, 18:40 | ||
| archeg, Спасибо. Тупой вопрос, а почему моя программа на разных машинах ведет себя по-разному? Я думал что код один и тот же где описано как ей вести себя. Смогу ли я с помощью try-catch отловить на своей машине ошибку, если она там не возникает или (try-catch) будет как-то особенно работать на других машинах? А что здесь писать?
Добавлено через 2 минуты и 4 секунды Experimenter, Спасибо. Последний вопрос снимаю |
| Автор: Experimenter 19.10.2007, 19:01 |
| okaton, есть такое предположение, что на твоей машине программа тоже может выдать ошибку, но ты работаешь с программой как ее создатель, а юзер - как юзер. Он может совершить ряд нелогичных действий (с твоей точки зрения и с точки зрения CLR), которые ты бы не стал совершать, потому что он понятия не имеет, как твоя программа устроена. Для этого и существует тестирование. Добавлено через 5 минут и 49 секунд В любом случае возьми за правило оборачивать код в отлов исключений, и твоя работа в части технической поддержки твоих приложений будет существенно облегчена. А то и вообще отпадет за ненадобностью. |
| Автор: okaton 19.10.2007, 19:20 | ||||||
| Experimenter, дело в том что я совершаю абсолютно одинаковые действия на двух машинах (вот что странно), а эффект различный :(
На этом этапе(TH.Form23.RW_Data_in_Mass() (предфинальном)) программа работает без участия пользователя, она записывает в массивы данные (в том числе из файлов) а здесь (TH.Form23.Rabota()) она обрабатывает полученные по ходу данные + (отсюда TH.Form23.RW_Data_in_Mass() ) Но допустив что я что-то упустил (я уже склоняюсь к тому что так оно и есть) я не могу понять вот это
Единственное что отсюда TH.Form22.Proverka() и отсюда стартует функция в которой содержиться TH.Form23.RW_Data_in_Mass() и т.д. А вот это вообще загадка
Сейчас попробую try-catch, поглядим что скажет |
| Автор: archeg 19.10.2007, 19:46 | ||
Ну дай код - посмотрим ) |
| Автор: Experimenter 19.10.2007, 19:50 |
| Действительно, тащи код, вот эту самую процедуру TH.Form23.RW_Data_in_Mass() и все, что ты ей на вход даешь... |
| Автор: okaton 19.10.2007, 20:21 | ||
У меня складывается такое впечатление что программа не может получить доступ к файлу (T_ASA1.1 это первый файл к которому она обращается, распологается в корневой директории моей программы (на моей машине пробовал тот же вариант(в смысле там же расположил - работает))) Что интересно после возникновении ошибки на рабочем столе возникает T_ASA1.1 размером 0кb |
| Автор: okaton 19.10.2007, 20:40 | ||
Я поставил в RW_Data_in_Mass() перед каждым циклом считывания файла try-catch программа отработала как надо Перед этим я ставил try-catch на все функции в Rabota() и была ошибка
Добавлено через 4 минуты и 47 секунд Неужели проблема в ДНК? Что же далать? |
| Автор: Experimenter 19.10.2007, 20:50 | ||
Главный претендент на исключение вот этот цикл:
В файл "T_ASA" + nn + ".1" могут и ручками залезть любопытные, размер массива strs изменится, и лови его, исключение. У тебя здесь нет проверки массива strs на его размерность, но тем не менее переменную i ты инкрементируешь без всяких оглядок. |
| Автор: okaton 19.10.2007, 20:56 | ||
Про ручки и то что могут согласен |
| Автор: 1stain 19.10.2007, 20:59 | ||
| проблема в том, что i даже инкрементировать не надо, вылетит сразу, на strs[0]. Все дело в том, что у тебя файлы существуют и они не пустые, а на другом компе файла нет, он создается, но данных не содержит. Соответственно text = "" и массив strs не содержит ничего. з.ы.
ты сам почти нашел причину - ...T_ASA1.1 размером 0кb (а то что он возникает на рабочем столе, так программу запускают с рабочего стола, а путь для создания файла ты нигде не указываешь, так что все закономерно) з.з.ы. а вообще, по-моему тебе нужно использвать сериализацию |
| Автор: Experimenter 19.10.2007, 21:08 | ||||||
правильно, что возникает, ты ж его сам создаешь
идем далее: так как длина только что созданного файла равна 0, цикл
В том то и дело - файл удалили или его и не было, а у тебя в случае его отсутствия генерится на рабочем столе файл T_ASA1.1 с размером 0 кb. Проверку File.Exists("filename") ты тоже не делал... Если б делал, все было б нормально... Ладно, что-то я разошелся... |
| Автор: okaton 19.10.2007, 21:17 |
| 1stain, Experimenter, СПАСИБО!!! Сейчас буду исправлять. А по поводу T_ASA1.1, они присутствуют |
| Автор: Experimenter 19.10.2007, 21:20 | ||
Видимо, не всегда, чудес не бывает. Да и дальше по циклу другие файлы могут создаваться тоже с нулевым размером. Добавлено через 9 минут и 23 секунды В одном ты прав - код работает одинаково у тебя и у юзера |
| Автор: okaton 19.10.2007, 21:46 | ||||||
Я его сам туда засовывал, и после ошибки программы он там оставался в том же виде в котором я его и оставлял... я изменил FileStream
на
И вот что обнаружил первый раз отработала нормально, а во второй выдала ошибку о том что файл T_ASA1.1 не найден на рабочем столе (тут расположен ярлык через который я запускал программу (программа запакована в Inno Setup))) После я запустил через Пуск\Программы\... (тут тоже был создан ярлык) - та же история. Запустил из папки куда установил - работат, создал ярлык на рабочий стол - работает. Проверил грешным делом может инсталлятор создал не ярлык, а исполняемый файл запихнул - нет ЯРЛЫКИ. Странно Добавлено @ 21:49 В ярлыках не указана была рабочая папка поэтому, видимо, был косяк Завтра еще потестю, отпишусь как прошло |
| Автор: Experimenter 19.10.2007, 21:55 |
| Тогда пропиши в коде абсолютные пути к своим файлам (или еще лучше - в настройки вынеси) и не мучайся. И учти тот момент, что если файл и есть, то у него может быть размер нулевой, что тоже к ошибке приведет. |
| Автор: okaton 20.10.2007, 11:32 |
| Работает. Я текстовые файлы добавил к проекту и в ресурс и прочитал их от туда. Вот с остальными так не получилось ресурсы читаю только byte или text, а мне надо float. А как перевести byte во float я даже не дагадываюсь :( Так что написал там абсолютный путь. Всем большое спасибо за оказанную помощь и поддержку! |
| Автор: okaton 20.10.2007, 14:46 |
| byte во float перевести получилось через BitConverter.ToSingle Теперь внешних файлов у программы не будет. |