Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2015, 15:21   #1
ninja2
Форумчанин
 
Регистрация: 13.08.2015
Сообщений: 193
По умолчанию Блокирование файла

Есть файл и есть 10 запущенных копий программы, программы периодически обращаются к файлу читают данные и изменяют его, нужно сделать так чтобы файл блокировался когда к нему обратилась одна программа, что то делает с ним и когда ей не нужен то тогда чтобы могла к нему обратится другая программа. Как так сделать?
ninja2 вне форума Ответить с цитированием
Старый 27.10.2015, 15:25   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

mutex что ли?

А зачем 10 копий? Не проще 10 потоков?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 27.10.2015, 16:31   #3
ninja2
Форумчанин
 
Регистрация: 13.08.2015
Сообщений: 193
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
mutex что ли?

А зачем 10 копий? Не проще 10 потоков?
Так уже сделано что каждый раз нужно копию проги запускать. В потоках лучше было бы.

Наврятли мутекс. В MFC было вроде можно файл открыть с флагом что ни одна другая программа не могла его использовать, потом закрыть и другие проги могут его использовать. Что то такое было, читал давно. От интересно в С# есть такое? Чтобы одна прога открыла файл и он заблокировался.
ninja2 вне форума Ответить с цитированием
Старый 27.10.2015, 16:36   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Так вроде по умолчанию так и есть. Как вы файл открываете?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 27.10.2015, 17:19   #5
ninja2
Форумчанин
 
Регистрация: 13.08.2015
Сообщений: 193
По умолчанию

Та еще не пробовал, щас попробую, мне нада чтобы она и читать не могла.
ninja2 вне форума Ответить с цитированием
Старый 27.10.2015, 18:06   #6
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Цитата:
Наврятли мутекс
А для чего по вашему они вообще были придуманы? (подсказка: в том числе и для синхронизации нескольких процессов)
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 27.10.2015, 21:39   #7
ninja2
Форумчанин
 
Регистрация: 13.08.2015
Сообщений: 193
По умолчанию

Цитата:
А для чего по вашему они вообще были придуманы? (подсказка: в том числе и для синхронизации нескольких процессов)
А как ими пользоваться? Реально через файл неудобно.
Вот так делаю
Код:
fstream = new FileStream(@"data.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None);
Блокирует файл, но это не то. мне нужно считать с файла данные, потом с ними что то сделать, а затем вернуть в файл. Если я так файл открываю как в коде выше, то я его не могу перезаписать. Нужно его заново открыть с модом либо Create либо truncate, или как его перезаписать? Если выставить указатель на 0, то он перезапишет данные, но нужно полностью его очистить и что делать? нужно байты как то в 0 чтоли установить, потом перезаписать. Короче головняк.

Проще File.WriteLine и File.ReadLine использовать чем по байтах записывать.

Нада мутекс попробовать мб. там попроще будет, неохота побайтово читать и записывать, это головняк.
ninja2 вне форума Ответить с цитированием
Старый 27.10.2015, 21:47   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Мутекс не пишет и не читает файл. Он используется для синхронизации.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 27.10.2015, 21:48   #9
ninja2
Форумчанин
 
Регистрация: 13.08.2015
Сообщений: 193
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Мутекс не пишет и не читает файл. Он используется для синхронизации.
Он для синхронизации между потоками используется вроде? А мне нужно между процессами, нужно симафоры использовать.
Цитата:
А для чего по вашему они вообще были придуманы? (подсказка: в том числе и для синхронизации нескольких процессов)
Наверно ты ошибся, мютек синхронизирует потоки, а не процессы, а у меня процессы нужно синхронизировать, вот цитата из википедии
Цитата:
Мью́текс (англ. mutex, от mutual exclusion — «взаимное исключение») — аналог одноместного семафора, служащий в программировании для синхронизации одновременно выполняющихся потоков.

Последний раз редактировалось ninja2; 27.10.2015 в 21:54.
ninja2 вне форума Ответить с цитированием
Старый 27.10.2015, 21:56   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А не важно какому процессу потоки принадлежат - одному или разному - мьютексу без разницы
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Блокирование события Gagapsha JavaScript, Ajax 5 19.02.2014 18:06
Блокирование файла Balabek Общие вопросы C/C++ 10 20.07.2012 14:27
Блокирование ALT+F4 Killbrum Win Api 5 14.03.2009 12:23
Блокирование клавиатуры Milly Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 18.10.2007 19:15
блокирование функции Fireleo Win Api 5 29.07.2007 17:04