Работа двух шаблонов с одним файлом с данными.

  • Автор темы Автор темы one
  • Дата начала Дата начала

one

Client
Регистрация
22.09.2015
Сообщения
7 003
Реакции
1 308
Баллы
113
Друзья, помогите с мыслями. Работаю над разработкой шаблона и не могу придумать корректную реализацию одного момента. Два шаблона, один собирает данные и ложит (дописывает) их в файл, второй берет из этого файла данные и удаляет взятое. Второй шаблон будет работать во много потоке, возможно и первый тоже. Вопрос. При такой схеме, возможна же потеря данных в файле или сбоя одного из шаблонов по причине того, что в момент обращения одного из шаблонов к файлу он может быть занят другим шаблоном. Как избежать это?
 
оно по идее должно нормально работать когда не одновременно в тот же миг, иначе надо ловить ошибку обращения к файлу и запускать паузу в цикле пока не попадёт на свободный момент, не знаю может и на кубиках можно сделать, либо try использовать
 
  • Спасибо
Реакции: one
Вот в этом и проблема. Шаблоны будут работать не зависимо друг от друга и вероятность одновременного обращения к файлу высока. Может в одном из шаблонов ставить в начале цикла проверку на занятость файла? Каким образом?
 
C#:
Развернуть Свернуть Копировать
try
    {
        File.Open(fileName, FileMode.Open, FileAccess.ReadWrite, FileShare.None);
    }
этот код будет вызывать эксепшион при одновременном чтении или записи (FileAccess.ReadWrite) , а FileShare.None - Отклоняет совместное использование текущего файла
я не знаю, просто как в зенкепри открытии файла, устанавливается ли FileShare , если устанавливается FileShare.None , то кубик взятия или записи строки в файл будет вызывать ошибку и тогда на кубиках можно сделать обработку по красной ветке, например цикл повторять запись или взятие пока не будет успеха
 
Понятно, спасибо! Попробую предложенное решение.
 
...цикл повторять запись или взятие пока не будет успеха
Это не сможет привести случайно к бесконечному циклу, если к примеру файл потеряется либо его невозможно будет прочитать?
 
Это не сможет привести случайно к бесконечному циклу, если к примеру файл потеряется либо его невозможно будет прочитать?
если, то да, надо добавлять проверки, просто с чего бы ему теряться или его нельзя будет прочитать? я о таком даже и не думал как то, может этот как раз тот случай - пока петух не клюнет))
 
если, то да, надо добавлять проверки, просто с чего бы ему теряться или его нельзя будет прочитать? я о таком даже и не думал как то, может этот как раз тот случай - пока петух не клюнет))
Я из-за таких проблем ушел работать на выделенный сервер - у меня постоянно (почти каждый день) выключают электричество.
Если в тот момент Зенно работал с файлом - то при следующем запуске проблема - файл не читаемый.
Из-за чего переспросил - чтобы знать как решать эти проблемы, ведь при старте уйдет в бесконечный цикл.
 
так ты вроде и с БД всегда работаешь. мне вот по БД пока знаний не хватает, у нас из-за этого одно дельце застопорилось, а сам пока не вникаю - ещё пока си шарп подтягиваю
 
так ты вроде и с БД всегда работаешь. мне вот по БД пока знаний не хватает, у нас из-за этого одно дельце застопорилось, а сам пока не вникаю - ещё пока си шарп подтягиваю
С БД я сейчас работаю почти всегда.
Но, иногда удобнее работать с файлами (шаблон быстрее пишется) - так что знания в этом направлении не помешают.
Впрочем, если кому-то чего-то на заказ писать - то не всем подойдет работа с БД.
 
попытался погуглить - как не потерять файл при отключении электричества, так ничего и не нашёл... но ворд и эксель не теряют же данные при отключении во время работы в их же программах, значит можно как-то
 
  • Спасибо
Реакции: BAZAg
но ворд и эксель не теряют же данные при отключении во время работы
У них параллельно создается резервный файл при каждом обращении к исходному файлу для таких случаев. Продумано все. :)
 
У них параллельно создается резервный файл при каждом обращении к исходному файлу для таких случаев. Продумано все. :-)
да, я так тоже начал делать и всё дублирую в другой файл, но! когда работает сразу больше даже 15 потоков, при при срыве один поток может записывать в основной, а 10-й поток например в дублирующий)) это что тогда дублирующий файл для каждого потока делать?) думал у них как-то подругому реализовано это, а получается, что так же, что ли? у них то нет многопотока, им проще)
 
попытался погуглить - как не потерять файл при отключении электричества, так ничего и не нашёл... но ворд и эксель не теряют же данные при отключении во время работы в их же программах, значит можно как-то
Элементарно, Ватсон. Просто создается бэкап копия файла, куда и делается выгрузка нужных данных. При сохранении данных в зеннопостере эта бэкап копия записывается в основную. Аналогичное и можно провернуть в зеннопостере, только в c# надо разбираться.
 
Элементарно, Ватсон. Просто создается бэкап копия файла, куда и делается выгрузка нужных данных. При сохранении данных в зеннопостере эта бэкап копия записывается в основную. Аналогичное и можно провернуть в зеннопостере, только в c# надо разбираться.
бэкап при многопотоке не поможет, я же выше написал, нам тогда для каждого потока свой бэкап надо делать, но может это единственное решение, а может ты имеешь в виду другой бэкап?
 
просто можно и без си шарпа на кубиках забэкапить с дубликатом, но когда много потоков, то дофига файлов будет создаваться и костыли для костылей надо ещё сообразить))
 
А можно просто купить ИБП
 
:D

А если использовать БД, то описанная выше проблема снимается?
mySQL своими внутренними средствами лочит данные на момент обращения
И в случае обращения потоков к базе
mySQL поставит в очередь запросы от потоков - так что данные не потеряются
 
В общем сделал я свой выбор реализации задуманного с использованием MySQL. Вещь! :)
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)