Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - Почему программе не получается считать из файла данные,записанные туда др.программой?

Ответить
Настройки темы
Разное - Почему программе не получается считать из файла данные,записанные туда др.программой?

Пользователь


Сообщения: 51
Благодарности: 1

Профиль | Отправить PM | Цитировать


одна программа(назовем ее прога 1), написанная на делфи пишет в файл "ФИО.тхт" данные, не получается считать(и записать туда) из этого файла инфу прогой 2(написана на с++), пока не выйдешь из проги 1.

-------
разные дровишки


Отправлено: 18:41, 17-01-2011

 

Аватара для lxa85

Необычный


Contributor


Сообщения: 4462
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


Nayan, после чтения/записи или иной работы с фалом, его надо закрывать. Желательно сразу после окончания работы, а не в конце программы.
Так же возможно это влияния работы файловой подсистемы, когда при открытии файла одной программой, другой запрещается работать с ним.

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:02, 17-01-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 51
Благодарности: 1

Профиль | Отправить PM | Цитировать


Да, конечно его закрываю после записи прогой 1 и до обращения второй проги к файлу.
Цитата lxa85:
возможно это влияния работы файловой подсистемы, когда при открытии файла одной программой, другой запрещается работать с ним. »
------- а как это выглядит на практике и как избавиться от этой проблемы?

-------
разные дровишки


Отправлено: 19:13, 17-01-2011 | #3


Старожил


Сообщения: 154
Благодарности: 39

Профиль | Отправить PM | Цитировать


Виндос и любая другая ос без процесса, занявшего файл, никак его не блокирует.
Так что ищите что это за процесс, который занял этот файл. Проверьте - точно ли файл отпускается "программой 1". Попробуйте так - запустите "программу 1" и перед запуском "программы 2" убейте первую руками чтоб следов от нее не осталось. Если файл останется занят, бум думать.. но это врятли.

Цитата Nayan:
возможно это влияния работы файловой подсистемы, когда при открытии файла одной программой, другой запрещается работать с ни »
это выглядет как у вас - "программа 1" открыла файл для операций с ним и нет ключа на совместное исп-ие файла (в .net такое вроде есть) или не закрыла работу с ним. До тех пор пока работа не закроется ни одна другая программ, скажем блокнот, его не откроет.
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:17, 17-01-2011 | #4


Аватара для Delirium

Ветеран


Сообщения: 5624
Благодарности: 936

Профиль | Отправить PM | Цитировать


Скачиваем программу Unlocker , а правым щелчком на заблокированном файле - Unlocker - он покажет, что блокирует файл. В любом случае проблемы из за монопольного доступа "проги_1" к файлу. Создателю надо было не брать файл в монопольный доступ для прочтения данных.

-------

Пройденные курсы:
[Microsoft №10174 Sharepoint], [SharePoint]
Мои проекты:[CheckAdmins], [NetSend7], [System Uptime], [Remote RAdmin LogViewer],[Netdom GDI], [Holidays - напоминалка о днях рождения]

А я офис-гуру :)

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:52, 18-01-2011 | #5


Пользователь


Сообщения: 51
Благодарности: 1

Профиль | Отправить PM | Цитировать


Это прога 2 (С++ Builder 2009), при создании формы происходит:

Код: Выделить весь код
ampmax=fopen("AMPLITUDE.txt","r+t");
fio=fopen("fio.txt","r+t");  
    do    
      {    
          fscanf(fio,"%s",&str3);    
          if (feof(fio)) break; 
      }   
     
     while(true); 
     
   for(j=0;j<6;j++)    
     {
           fscanf(ampmax,"%s",&stramp); 
           strA=strA+" "+stramp;
           maximum[j]=atoi(stramp); 
     } 
   
             Label6->Caption=strA;
             Label5->Caption=str3; 
             fclose(fio); 
             fclose(ampmax);
при этом есть такая особенность, если я запускаю сам (то бишь нахожу ехе-файл проги2 и кликаю по нему), то прога 2 запускается, данные из файла читает. В случае запуска через WinExec прогой1(делфи7) выдает ошибку. Вот участок кода который запускает прогу2 из проги1:

Код: Выделить весь код
procedure TMainForm.N1Click(Sender: TObject);
begin
  if (ADC_Path <> '') then
    WinExec(PChar(ADC_Path), SW_ShowNormal)
  else
    Application.MessageBox('Не указано распололожение утилиты АЦП', 'Ошибка', MB_OK);
end;
Подскажите плз решение проблемы,что неправильно или вообще может использовать другие ф-ии считывания или запуска 1-го приложения из другого?

-------
разные дровишки


Отправлено: 16:50, 24-01-2011 | #6


Старожил


Сообщения: 154
Благодарности: 39

Профиль | Отправить PM | Цитировать


ну я даже незнаю что тебе в таком случае посоветовать... скажем... попробуй подождать пока ты не получишь доступ к файлу. Сделать это легко: ф-ию открытия файла помести в try catch блок и все это в цикл до тех пор, пока не откроется файл. Но опять-же - тогда ты просто дождешься лазейки (если она будет) и отберешь файл у зазевавшейся программы, как она отреагирует на такую наглость - как программист написал. варварство конечно.. но может прокатить.

Отправлено: 19:07, 24-01-2011 | #7


Пользователь


Сообщения: 51
Благодарности: 1

Профиль | Отправить PM | Цитировать


Изображения
Тип файла: png -------------ошибка на винде 7версии.png
(7.5 Kb, 5 просмотров)

опять проблема в связке этих 2 программ. В ХР более менее работает. А вот в вин7 выходит ошибка аксес виолейшн(скрин окна ошибки прикреплен). При этом замечено, что при запуске пользователем такой ошибки нет, а при вызове из другой программы (winexec'ом) есть.

блин как загнать картинку в спойлер?

-------
разные дровишки


Отправлено: 08:53, 04-05-2011 | #8


Старожил


Сообщения: 295
Благодарности: 30

Профиль | Отправить PM | Цитировать


Вместо устаревшей WinExec используй ShellExecute. Детали - в справке или в гугле.

Отправлено: 20:31, 04-05-2011 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - Почему программе не получается считать из файла данные,записанные туда др.программой?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Считать инфу из разделов INI файла в разные массивы. FlatX007 AutoIt 18 23-12-2010 22:57
Разное - [решено] "Рекомендуемые программы" контекстного меню - как попасть туда программе? FOx99 Microsoft Windows 2000/XP 5 25-06-2010 17:27
[решено] Открытие файла в программе cra5h_ AutoIt 4 19-11-2009 15:39
Разное - Связать расширение файла со своей программой galileopro Microsoft Windows 2000/XP 1 30-10-2009 22:02




 
Переход