Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Почему программе не получается считать из файла данные,записанные туда др.программой? (http://forum.oszone.net/showthread.php?t=196897)

Nayan 17-01-2011 18:41 1590899

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

lxa85 17-01-2011 19:02 1590906

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

Nayan 17-01-2011 19:13 1590912

Да, конечно его закрываю после записи прогой 1 и до обращения второй проги к файлу.
Цитата:

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

------- а как это выглядит на практике и как избавиться от этой проблемы?

Beyound 17-01-2011 21:17 1591004

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

Цитата:

Цитата Nayan
возможно это влияния работы файловой подсистемы, когда при открытии файла одной программой, другой запрещается работать с ни »

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

Delirium 18-01-2011 00:52 1591140

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

Nayan 24-01-2011 16:50 1596247

Это прога 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-го приложения из другого?

Beyound 24-01-2011 19:07 1596365

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

Nayan 04-05-2011 08:53 1669959

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

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

Любезный 04-05-2011 20:31 1670290

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


Время: 03:39.

Время: 03:39.
© OSzone.net 2001-