На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual Basic: Общие вопросы
Здесь обсуждаются вопросы по языку Visual Basic 1-6 (а так же по схожим языкам, как, например, PowerBASIC).
Вопросы по Visual Basic .NET (это который входит в состав Visual Studio 2002/2003/2005/2008+, для тех, кто не в курсе) обсуждаются в разделе .NET.

Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что Вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются. Студенты, вам сюда: ПОМОЩЬ СТУДЕНТАМ!
4. Используйте теги [ code=vba ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Формулируйте свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной (и более) давности, без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта user posted image FAQ Раздела user posted image Кладовка user posted image Наши Исходники user posted image API-Guide user posted image Поиск по Разделу user posted image MSDN Library Online user posted image Google

Ваше мнение о модераторах: user posted image SCINER, user posted image B.V.
Модераторы: SCINER, B.V.
  
> Как правильно высвободить файл для последовательного чтения? , Вот такая незадача: все сделано классически но, видимо, есть какой то нюанс в работе input MyFile...close #MyFile
    Всем привет!
    Сложилась немного непонятная для меня ситуация.
    Есть проект - форма,несколько десятков label в которые исходя из определенных математических вычислений заносится информация.
    Вводные данные в эти label читаются из текстового файла.

    Так вот, в процессе работы проекта этот файл несколько раз открывается, читается, закрывается.
    И аналогично записывается туда информация.
    Все стандартно:

    ExpandedWrap disabled
      Dim MyFile, str_ as String
      MyFile = FreeFile
          
          Open (Faile) For Input As #MyFile
          Input #MyFile, str_
       
          ..............
       
          Close #MyFile

    Чтение происходит без ошибок, а вот попытка записи в этот же файл - ошибка доступа

    ExpandedWrap disabled
          
          Open (Faile) For Output As #MyFile
        
       
          ..............
       
          Close #MyFile


    При этом если создать новый файл, заведомо свободный - без проблем...

    Может что то посоветуете?

    Сам проект работает исправно, тонее работал до того, как понадобилось записывать данные в файл...
    Сообщение отредактировано: Лютик -
      А какой смысл, имея ОДНО приложение, в каждой точке кода заниматься отдельными открытиями-закрытиями файла?
        Цитата Akina @

        Приложение имеет несколько форм.
        Каждая форма при загрузке читает вводные данные из файла.
        Если юзер нажимает кнопку изменить формат данных - то производится перезапись определенной строки и расчет идет другим методом.
        Итого, 1 раз открывается когда Form_Load
        Далее - каждый час по таймеру обновление данных
        Третий раз - запись в строку, если кто то нажал кнопку.

        По моему логично... нет?
          Цитата Лютик @
          Каждая форма при загрузке читает вводные данные из файла.

          Вот тут - однозначно косяк. Надо - приложение запустилось, прочитало данные для ВСЕХ форм. А те запрашивают данные из глобальных данных приложения. Т.е. точка чтения - одна. Аналогично и точка записи одна, куда стекаются все реквесты.
            Цитата Akina @
            Цитата Лютик @
            Каждая форма при загрузке читает вводные данные из файла.

            Вот тут - однозначно косяк. Надо - приложение запустилось, прочитало данные для ВСЕХ форм.

            Ок, это понятно ... то есть у меня параллельно родился вопрос: можно не выполнять close #file пока идет работа программы и работать с файлом, а перед завершением работы закрыть файл? Вы это хотите сказать?Или имеется ввиду вынести функцию чтения-записи куда то в одно место и обращаться к ней по необходимости? Хотя так, по моему, почти тоже самое выходит.
            Ну и все таки - почему файл занят оказывается?Может быть так, что FreeFile пытается дать один и тот же канал, который оказывается не свободным?
            Мне прямо интересно.
            Сообщение отредактировано: Лютик -
              Цитата Лютик @
              можно не выполнять close #file пока идет работа программы и работать с файлом, а перед завершением работы закрыть файл? Вы это хотите сказать?

              Конечно, можно... особенно если выполнить сброс буферов. Хотя вариант выноса в отдельный модуль, с обязательным контролем повторного входа - лучше.

              Добавлено
              Цитата Лютик @
              Ну и все таки - почему файл занят оказывается?Может быть так, что FreeFile пытается дать один и тот же канал, который оказывается не свободным?

              Думаю, причина в том, что ничто не выполняется мгновенно. А freefile в принципе не может вернуть несвободный хэндл.
                Файл может быть открыт антивирусом.попробуй подождатьь немного и попробовать его открыть сновва.
                  Ответ найден, причем весьма любопытный: атрибут файла "скрытый" на виндовс 10 дает такой эффект...
                    Цитата Лютик @
                    атрибут файла "скрытый" на виндовс 10 дает такой эффект

                    Ну вообще-то скрытые и системные файлы не только в десятке требуют "особого" подхода... интересно, зачем надо было хидать какой-то там файл данных?
                      Цитата Akina @
                      зачем надо было хидать какой-то там файл данных?

                      Там хранятся параметры настроек работы программы для каждого юзера.
                      Каждому свое, как говорится.
                      Их 61
                        Цитата Лютик @
                        Там хранятся параметры настроек работы программы для каждого юзера.

                        Ну вообще-то для этого реестр есть, HKCU/Software... что приятно - у каждого юзера он свой, и чужие настройки туда не попадут... а во HKLM/Software можно положить дефолтные настройки, которые применяются при отсутствии или повреждении пользовательских.
                          Цитата Akina @

                          Да, я уже тоже об этом думал.
                          Следующий релиз, думаю таким и будет)
                          Всем спасибо за отклик.
                          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                          0 пользователей:


                          Рейтинг@Mail.ru
                          [ Script execution time: 0,0339 ]   [ 17 queries used ]   [ Generated: 28.03.24, 09:42 GMT ]