powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / могут ли команды COPY TO и COPY FILE вызвать ошибку File access is denied
25 сообщений из 33, страница 1 из 2
могут ли команды COPY TO и COPY FILE вызвать ошибку File access is denied
    #37163234
ElenaZaus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, форумчане! Просмотрела уже все темы по данной ошибке - свое решение не нашла. Помогите пожалуйста, если кто сможет. Ситуация такая.
Есть некий пользователь-хозяин, который в АРМе делает приказы и путем нажатия кнопки "ПОСЛАТЬ ПОЛЬЗОВАТЕЛЯМ" создает на СВОЕЙ машине другой файл:
set exclusive off
SELECT prik_stan
COPY TO c:\jurnal\data\prik_stan1.dbf

После этого несколько пользователей в разных частях города нажимают кнопку "Показать приказ" (т.е. в это время у них срабатывает такой код:

close tables all
set exclusive off
copy file &pyt11.prik_stan1.dbf to c:\jurnal\data\prik_stan1.dbf, где pyt11="\\10.9.6.100\jurnal\data\", т.е. комп того пользователя-хозяина.

Ну там еще несколько команд, не суть...И у этих нескольких пользователей на экране возникает нужный приказ. Так вот я подошла как раз к самой проблеме: у пользователя-хозяина ИНОГДА при нажатии кнопки "ПОСЛАТЬ ПОЛЬЗОВАТЕЛЯМ" возникает ошибка: "File access is denied c:\jurnal\data\prik_stan1.dbf", как будто эту таблицу кто-то держит. А кто? И как это засечь?И как исправить, если ошибка такая возникает не всегда, а лишь изредка? Если я что-то непонятно описала, задавайте вопросы - всего не опишешь. Заранее благодарна!
...
Рейтинг: 0 / 0
могут ли команды COPY TO и COPY FILE вызвать ошибку File access is denied
    #37163259
ElenaZaus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще уточнение: АРМы у всех пользователей одинаковые, только опции доступны разные. Идея такова: файл создается на компе хозяина с помощью COPY TO, а пользователи этот файл забирают к себе на машины с помощью COPY FILE, и открывают уже СВОЮ такую таблицу prik_stan1. Операция копирования - секундное дело, почему же тогда процесс как бы забирается каким-то пользователем и "висит", не давая работать дальше? И почему это бывает не всегда, а лишь время от времени?
...
Рейтинг: 0 / 0
могут ли команды COPY TO и COPY FILE вызвать ошибку File access is denied
    #37163361
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: ElenaZaus
> Операция копирования - секундное дело, почему же тогда процесс как бы забирается каким-то пользователем и
> "висит", не давая работать дальше? И почему это бывает не всегда, а лишь время от времени?


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

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
могут ли команды COPY TO и COPY FILE вызвать ошибку File access is denied
    #37163466
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделай копирование в цикле с паузой, раз 5-10, примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
for i =  1  to  10 
 try
  copy file ...
  i=  20  && выход из цикла
 catch
  inkey( 1 ) && пауза  1  сек.
 endtry
endfor
if i !=  20 
  ? 'ошибка копирования файла'
endif
...
Рейтинг: 0 / 0
могут ли команды COPY TO и COPY FILE вызвать ошибку File access is denied
    #37164891
ElenaZaus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T, спасибо большое. Я обязательно попробую.
А вот еще вопрос: может Вы или кто-нибудь еще из форумчан подскажете как написать небольшую программку для определения КТО ДЕРЖИТ ПРОЦЕСС, КАКОЙ ПОЛЬЗОВАТЕЛЬ? Была бы очень признательна, поскольку совсем нет опыта написания обработки ошибок, а надо срочно.
...
Рейтинг: 0 / 0
могут ли команды COPY TO и COPY FILE вызвать ошибку File access is denied
    #37164892
ElenaZaus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Игорь Горбонос, Вы очень точно поняли мою проблему, так оно наверное и происходит, но мне как-то нужно от такой ситуации избавиться. В связи с этим, и Вам такой же вопрос: подскажете как написать небольшую программку для определения КТО ДЕРЖИТ ПРОЦЕСС, КАКОЙ ПОЛЬЗОВАТЕЛЬ? Была бы очень признательна, поскольку совсем нет опыта написания обработки ошибок, а надо срочно.
...
Рейтинг: 0 / 0
могут ли команды COPY TO и COPY FILE вызвать ошибку File access is denied
    #37164898
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElenaZausDima T, спасибо большое. Я обязательно попробую.
А вот еще вопрос: может Вы или кто-нибудь еще из форумчан подскажете как написать небольшую программку для определения КТО ДЕРЖИТ ПРОЦЕСС, КАКОЙ ПОЛЬЗОВАТЕЛЬ? Была бы очень признательна, поскольку совсем нет опыта написания обработки ошибок, а надо срочно.
Если речь о про процессах, то поиск по форуму по слову "CreateToolhelp32Snapshot"

Если все-таки речь о файле, то нет простых способов просмотра кто держит файл.

Проще с обработкой ошибок разобраться. Ничего сложного в этом нет.
Если VFP9 то TRY ... CATCH используется в простейшем случае так:
Код: plaintext
1.
2.
3.
4.
5.
6.
TRY
  * код который может вызвать ошибку
CATCH to oErr
  * сюда попадаем только при ошибке
  * oErr объект с описанием ошибки
  ? "ОШИБКА: ", oErr.ErrorNo
ENDTRY
...
Рейтинг: 0 / 0
могут ли команды COPY TO и COPY FILE вызвать ошибку File access is denied
    #37164922
MAYAKOV_SV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElenaZaus,
Можно еще так попробовать копировать:
Код: plaintext
1.
2.
3.
o=CreateObject("Scripting.FileSystemObject")
o.CopyFile('\\10.9.6.100\jurnal\data\prik_stan1.dbf','c:\jurnal\data\prik_stan1.dbf',.t.)
release o
Хотя наверно это ничего не поменяет.

[quot ElenaZaus]
как написать небольшую программку для определения КТО ДЕРЖИТ ПРОЦЕСС, КАКОЙ ПОЛЬЗОВАТЕЛЬ?
[/quit]
Можно сделать табличку - "журнал копирования":
USER_NAME, DATE_FROM, DATE_TO.
Где USER_NAME - имя пользователя, DATE_FROM - дата начала копирования, DATE_TO - дата окончания копирования.
Перед тем, как пользователь будет копировать - там будет добавлена запись.
По окончании копирования будет проставлен DATE_TO.
В случае ошибки можно будет поглядеть последние записи, у которых DATE_TO не закрыты.
Это на уровне рассуждений, сам такое не пробовал.

Но лучше сделать проще, как Dima T писал - повторить несколько попыток копирования, в надежде, что файл за это время освободится.
...
Рейтинг: 0 / 0
могут ли команды COPY TO и COPY FILE вызвать ошибку File access is denied
    #37164948
ElenaZaus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T, так правильно, или получилось масло масляное?
ON ERROR DO ERR_MESS WITH ERROR()
baza='prik_stan1'
SELECT prik_stan
for i = 1 to 10
try
COPY TO c:\jurnal\data\prik_stan1.DBF
i= 20 && выход из цикла
catch
inkey(1) && пауза 1 сек.
endtry
endfor
if i <= 20 AND i>10
MESSAGEBOX ("ошибка копирования файла")
endif
ON ERROR
************************
PROCEDURE err_mess
PARAMETER meRror
IF meRror=108 .OR. meRror=1705
= MESSAGEBOX('Не удается скопировать таблицу '+baza+'. Вы будете пользоваться предыдущей версией таблицы',48, 'ВНИМАНИЕ')
ENDIF
return
************************

Может, тут уже не нужен обработчик ON ERROR?
...
Рейтинг: 0 / 0
могут ли команды COPY TO и COPY FILE вызвать ошибку File access is denied
    #37164968
MAYAKOV_SV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElenaZausМожет, тут уже не нужен обработчик ON ERROR?
Не нужен - он лишний.
...
Рейтинг: 0 / 0
могут ли команды COPY TO и COPY FILE вызвать ошибку File access is denied
    #37164984
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElenaZausDima T, так правильно, или получилось масло масляное?
Оно самое получилось.
Если ошибка происходит внутри try ... catch, то ON ERROR не срабатывает, т.е. тут его вообще не надо использовать.
т.е. в данном коде эти строки лишние:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
ON ERROR DO ERR_MESS WITH ERROR()
...
 PROCEDURE err_mess
 PARAMETER meRror
 IF meRror= 108  .OR. meRror= 1705 
    = MESSAGEBOX('Не удается скопировать таблицу '+baza+'. Вы будете пользоваться предыдущей версией таблицы', 48 , 'ВНИМАНИЕ')
 ENDIF   
 return
...
Рейтинг: 0 / 0
могут ли команды COPY TO и COPY FILE вызвать ошибку File access is denied
    #37165011
rock-n-roll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем вообще копировать? Почему не dele all,append from для "хозяина" и просто select для пользователя? И пофиг кто сидит.
Ну а если не пофиг тогда по вопросу "кто"(скопировал как у себя...может надо причесать.. ну общий смысл).Делаем вспомогательную табличку (сдесь users(id(C)(уникальное сочетание по ниму ищем сдесь sys(0)),name(C)(Человеческое представление ИВанов,Петров,Сидоров),type(L)(Монопольно или нет),When(T)(Когда).......)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
func test_base_openl
para mono_is
if !used('users')
   use users in  0 
endi
sele users
go top
loca for alltr(ID)==alltr(sys( 0 ))&&что бы не искать черную кошку в темной комноте, тем более когда ее там нет
 if !found()
    =MESSAGEBOX('У Вас нет прав доступа.... Обратитесь к админу!', 16 )
   use
   retu .F.
else 
   recno_user=recno()
endi

SET REPROCESS TO  0  SECONDS 
can_mono=.T.&& Изначально считаем что можно входить(Посмотрим че получится дальше)монопольно
can_loca=.T.&&локально
CREATE CURS curs_users ;
	(NAME C( 25 ), Type C( 10 ), When T)
sele users
go top
do while !eof()
  if recno()#recno_user&&не мы а кто-либо есче
 
   if lock()&&пытаемся заблокировать /поличилось значит была не заблокирована
     unlock&&вернем все в зад
   else&& не получилось значит была заблокирована кем-то -запоминаем в курсор
     nnnam=name
     tttype=iif(mono_local,'МОНОПОЛЬНО','ЛОКАЛЬНО  ')
     dddate=last_time
     sele curs_users
     APPEND BLANK
     repl NAME with nnnam,;
     	  Type with tttype,;
     	  When with dddate
     go top	  
     sele users
     can_mono=.F.&&если найдена хоть одна запись то для монопольного режима уже не подходит
     can_loca=iif(can_loca and !mono_local,.T.,.F.)
     *can_loca and !mono_loca - если после предыдущей записи переменная все еще 
    endi
  else &&если мы
    if lock()&&пытаемся заблокировать /поличилось значит была не заблокирована
     unlock&&вернем все в зад
    else 
       =MESSAGEBOX('У Вас уже открыта база - нафиг вам вторая', 16 )
       retu .F.
    endi  
   endi
  skip        
endd

*ИТАК в can_mono,can_loca - возможность открыт монопольно и нет соответственно и курсор с проблемами
*если таковые имеются

if (mono_is and !can_mono) or (!mono_is and !can_loca)&&требование -монопольно и входить нельзя
*or требование -локально и входить нельзя    
   retu .F.
endi
*если дошли до этого фрагмента все норм надо лишь дооформить себя же
go recno_user
repl mono_local with mono_is,;
      last_time with datetime()
endi  
name_user=name    
retu lock()&&-ыы уж себя точно залочить получся. Так что точно .T.
и вызов функции
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 if test_base_openl(.F.)&&.F. не сидит ли кто монопольно   
    *можем открывать свои таблицы по excl off 
 else 
         do form access_is_denied&&покажем почему
 endi

 if test_base_openl(.T.)&&.F. не сидит ли кто Вообще  
    *можем открывать свои таблицы по excl on 
 else 
         do form access_is_denied&&покажем почему
 endi
ну и снять лок со своей записи после завершения заботы с таблицами... причем если произойдет 'аппаратный' разрыв лок снимется и с users
...
Рейтинг: 0 / 0
могут ли команды COPY TO и COPY FILE вызвать ошибку File access is denied
    #37167465
ElenaZaus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T, пасибо, написала код. Посмотрим что получится. Щас тока до следующей ошибки, а у меня уже идет опытная эксплуатация. Боюсь, что 10 секунд не помогут, чтобы скопировался файл, если уж кто-то его держит. Но попробовать надо. В любом случае спасибо за помощь!
...
Рейтинг: 0 / 0
могут ли команды COPY TO и COPY FILE вызвать ошибку File access is denied
    #37167610
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElenaZausDima T, пасибо, написала код. Посмотрим что получится. Щас тока до следующей ошибки, а у меня уже идет опытная эксплуатация. Боюсь, что 10 секунд не помогут, чтобы скопировался файл, если уж кто-то его держит. Но попробовать надо. В любом случае спасибо за помощь!
Помогут если накладываются операции создания файла на его копирование по сети. Как Игорь выше писал.
Если умышленно кто-то держит - не помогут. Тогда надо искать кто его надолго открывает.
...
Рейтинг: 0 / 0
могут ли команды COPY TO и COPY FILE вызвать ошибку File access is denied
    #37167806
Banditos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ElenaZaus,

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

1. Добавить одну команду:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SET EXCLUSIVE OFF
SELECT prik_stan
COPY TO C:\JURNAL\DATA\prik_stan1.dbf

* добавляем строчку
COPY FILE C:\JURNAL\DATA\prik_stan1.dbf TO C:\PUBLIC\prik_stan1.dbf

Где C:\PUBLIC\ - папка для общего доступа.

2. Сама папка C:\PUBLIC\ - расшарена ТОЛЬКО НА ЧТЕНИЕ.

Подобный подход работает уже лет 15 на одном старом проекте - ни одного сбоя в копировании...
...
Рейтинг: 0 / 0
могут ли команды COPY TO и COPY FILE вызвать ошибку File access is denied
    #37178890
ElenaZaus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Banditos, в моем случае это не решает проблемы. Сеть плохая и там даже при копировании небольшого файла могут возникать затыки. Какая разница, ГДЕ идет копирование и КУДА? Файл prik_stan1.dbf точно так же может оказаться занят в момент копирования его в каталог PUBLIC.
Вся проблема в том, что не написана нормальная обработка ошибок. Может быть Вы знаете, как ее написать? Может быть есть уже готовая модель, которая где-то работает? Буду признательна за любую помощь.
...
Рейтинг: 0 / 0
могут ли команды COPY TO и COPY FILE вызвать ошибку File access is denied
    #37178911
ElenaZaus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T, а что Вы знаете о такой команде как SET REPROCESS TO nAttempts [SECONDS] [SYSTEM] | TO AUTOMATIC [SYSTEM]?
Эта команда заменяет Ваш TRY или нет? Что лучше работает? Есть у Вас такой опыт? И еще в этом же аспекте хотелось бы узнать Ваше мнение об ON ERROR. Вообще КАК ГРАМОТНО НАПИСАТЬ ОБРАБОТКУ ОШИБОК? Ваш TRY хорошая штука, но не всегда спасает. А мне надо, чтобы гарантировано работало. Не могли бы Вы мне помочь?
...
Рейтинг: 0 / 0
могут ли команды COPY TO и COPY FILE вызвать ошибку File access is denied
    #37178997
MAYAKOV_SV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElenaZausА мне надо, чтобы гарантировано работало.
Чтобы гарантированно работало, нужно, чтобы файл никто не занимал.
А если файл будет занят полчаса, тут ни TRY, ни ON ERROR с таймером не помогут.
Отсюда следует, что нужно организовать работу так, чтобы файл не занимался кем-то.
...
Рейтинг: 0 / 0
могут ли команды COPY TO и COPY FILE вызвать ошибку File access is denied
    #37179129
MAYAKOV_SV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElenaZausВаш TRY хорошая штука, но не всегда спасает.
Кстати, код можно усовершенствовать:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
bWorking = .T.
DO WHILE bWorking = .T.
 for i =  1  to  10 
  try
   copy file ...
   bWorking = .F.
   exit
  catch
   inkey( 1 ) && пауза  1  сек.
  endtry
 endfor
 if bWorking = .T.
  if messagebox("Файл заблокирован. Повторить копирование?",  4 ) =  7  then
    bWorking = .F.
   else
    ? 'ошибка копирования файла'
  endif
 endif
enddo
...
Рейтинг: 0 / 0
могут ли команды COPY TO и COPY FILE вызвать ошибку File access is denied
    #37179139
MAYAKOV_SV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помарочка небольшая у меня.
Вот поправил:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
...
 if bWorking = .T.
  if messagebox("Файл заблокирован. Повторить копирование?",  4 ) =  7  then
    ? 'ошибка копирования файла'
    bWorking = .F.
  endif
 endif
enddo
...
Рейтинг: 0 / 0
могут ли команды COPY TO и COPY FILE вызвать ошибку File access is denied
    #37179520
PP762
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
было бы не хренова файлы исключить из проекта.
...
Рейтинг: 0 / 0
могут ли команды COPY TO и COPY FILE вызвать ошибку File access is denied
    #37179541
PP762
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Было бы вообще, красиво ) Чем слушать вот ту галиматью которую тебе тут писали ))
...
Рейтинг: 0 / 0
могут ли команды COPY TO и COPY FILE вызвать ошибку File access is denied
    #37179686
sqlnew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чё-то навскидку родился такой вариант.
А на кой черт вообще файл копировать?

stroka=filetostr("&pyt11.prik_stan1.dbf")
strtofile(stroka,"c:\jurnal\data\prik_stan1.dbf")
use c:\jurnal\data\prik_stan1.dbf


можно еще в цикле проверять, втянулась ли строка:

stroka="*"
sek=seconds()
do while stroka="*" .and. seconds()-sek<120 (например)
stroka=filetostr("&pyt11.prik_stan1.dbf")
inkey(0.1)
enddo
if stroka<>"*"
strtofile(stroka,"c:\jurnal\data\prik_stan1.dbf")
use c:\jurnal\data\prik_stan1.dbf
else
? "Чтение не удалось"
endif


Или я чего-то не догнал?
...
Рейтинг: 0 / 0
могут ли команды COPY TO и COPY FILE вызвать ошибку File access is denied
    #37179843
PP762
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
if stroka<>"*"
strtofile(stroka,"c:\jurnal\data\prik_stan1.dbf")
use c:\jurnal\data\prik_stan1.dbf
else
? "Чтение не удалось"
endif

Про обработку ошибок,временами, почитать надо... И не нужно воровать код у бестолковых. Ну затрать ты час, ну 2, сядь спокойно и просто почитай хелп по фоксу. Тем более что он переведен, почти. Правда бестолково, но понять можно.
...
Рейтинг: 0 / 0
могут ли команды COPY TO и COPY FILE вызвать ошибку File access is denied
    #37179880
sqlnew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
********** Про обработку ошибок,временами, почитать надо...

Да пёс ты с ним про обработку и времена. Я же сказал - пришло в башку - написал. А что по существу по поводу STRTOFILE и обратно без копирования файла?
...
Рейтинг: 0 / 0
25 сообщений из 33, страница 1 из 2
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / могут ли команды COPY TO и COPY FILE вызвать ошибку File access is denied
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]