19 / 19 / 4
Регистрация: 18.02.2011
Сообщений: 292
|
|
1 | |
Отказ в доступе на запись в файл из пятидесяти потоков26.09.2012, 17:07. Показов 2093. Ответов 15
Метки нет (Все метки)
Я использую класс StreamWriter для записи данных в файл, это происходит сразу в 50 потоках. Мне выдается исключение "Процесс не может получить доступ к файлу". Не знаю в чем проблема, кто знает что делать прошу ответить в теме.
0
|
26.09.2012, 17:07 | |
Ответы с готовыми решениями:
15
Отказ в доступе при записи в файл Отказ в Доступе !!! Отказ в доступе Отказ в доступе |
17686 / 12872 / 3365
Регистрация: 17.09.2011
Сообщений: 21,138
|
|
26.09.2012, 17:56 | 2 |
Проблема в том, что файл уже используется другим потоком.
0
|
19 / 19 / 4
Регистрация: 18.02.2011
Сообщений: 292
|
|
26.09.2012, 20:32 [ТС] | 3 |
kolorotur, это понятно. А как эту проблему обойти, чтобы все потоки добавляли в файл данные.
0
|
17686 / 12872 / 3365
Регистрация: 17.09.2011
Сообщений: 21,138
|
|
26.09.2012, 23:14 | 4 |
Открыть файл в режиме FileShare.Write и синхронизировать потоки.
1
|
19 / 19 / 4
Регистрация: 18.02.2011
Сообщений: 292
|
|
27.09.2012, 20:48 [ТС] | 5 |
kolorotur, синрхонизировать - это разделить между ними работу ?
0
|
17686 / 12872 / 3365
Регистрация: 17.09.2011
Сообщений: 21,138
|
|
27.09.2012, 21:08 | 6 |
PaZL, нет, это реализовать механизм, при котором только один из потоков записывает что-то в файл в конкретный момент времени.
0
|
17686 / 12872 / 3365
Регистрация: 17.09.2011
Сообщений: 21,138
|
|
27.09.2012, 23:42 | 8 |
Да, как один из возможных методов синхронизации.
0
|
19 / 19 / 4
Регистрация: 18.02.2011
Сообщений: 292
|
|
27.09.2012, 23:59 [ТС] | 9 |
kolorotur, а почему нельзя сделать, чтобы все потоки писали в файл - использую конструкцию using.
0
|
17686 / 12872 / 3365
Регистрация: 17.09.2011
Сообщений: 21,138
|
|
28.09.2012, 01:54 | 10 |
PaZL, дык потому что ерунда получится, а не запись.
Один поток одно пишет, другой поток тут же другое, в итоге в файле все в кучу будет. using лучше не использовать в подобном сценарии. Откройте один Stream и на него синхронизируйте все потоки. А еще лучше для записи в лог создать выделенный поток, который будет доставать логи из очереди и тупо писать их в файл, а остальные 50 потоков будут просто добавлять свои записи в очередь. В результате все быстрее работать будет.
0
|
19 / 19 / 4
Регистрация: 18.02.2011
Сообщений: 292
|
|
28.09.2012, 17:34 [ТС] | 11 |
kolorotur, а как ставить в очередь. Добавлять в List<string> ?
0
|
1453 / 845 / 150
Регистрация: 06.06.2012
Сообщений: 2,370
|
|
28.09.2012, 17:57 | 12 |
Ну да! Заведите лист! И пусть все потоки в него добавляют записи а один поток берёт нулевой элемент и пишет его в файл!
Добавлено через 1 минуту Есть кстати какая то коллекция потокобезопасная в которую могут добавлять данные кучи потоков! Но название её я не помню! Добавлено через 4 минуты Вот выбирай : http://msdn.microsoft.com/ru-r... rrent.aspx
0
|
19 / 19 / 4
Регистрация: 18.02.2011
Сообщений: 292
|
|
28.09.2012, 18:41 [ТС] | 13 |
LeniumSoft, А чем обычный лист не годен ? Потокобезопасный это как ? Если что не так, извините за тупые вопросы. С потоками только начал работать.
0
|
17686 / 12872 / 3365
Регистрация: 17.09.2011
Сообщений: 21,138
|
||||||
28.09.2012, 18:50 | 14 | |||||
Тем, что при добавлении/удалении тоже синхронизироваться придется вручную. Ну и само удаление из начала списка - не самая быстрая операция при большом количестве элементов.
Вот вам пример того, о чем я писал выше:
1
|
19 / 19 / 4
Регистрация: 18.02.2011
Сообщений: 292
|
|
28.09.2012, 18:51 [ТС] | 15 |
Когда я пытаюсь записать List в файл - мне выдает, что коллекция уже изменена. С потокобезопасным этого уже не будет ?
0
|
17686 / 12872 / 3365
Регистрация: 17.09.2011
Сообщений: 21,138
|
|
28.09.2012, 18:53 | 16 |
PaZL, попробуйте мой пример выше.
Если сработает - адаптируйте под свои нужды. А ваша ошибка скорее всего связана с тем, что вы список пытаетесь как-то изменить в блоке foreach, что запрещено.
1
|
28.09.2012, 18:53 | |
28.09.2012, 18:53 | |
Помогаю со студенческими работами здесь
16
Отказ в доступе Отказ в доступе Ошибка,отказ в доступе Отказ в доступе к интернету Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |