Проблема с временным файлом FoxPro

У нас есть следующая строка кода Visual FoxPro 9

INDEX ON batchno TO temp FOR !DELETED()

У нас возникает проблема, когда скомпилированное приложение FoxPro запускается, пытается перечислить содержимое папки, найти временный файл, создать временный файл (база данных с именем temp.idx), а затем перейти к дальнейшей обработке для ссылки на временные данные.

Похоже, это работало нормально, когда мы работали на сервере каталогов Novell с файловой системой NFS. Однако теперь, когда мы перешли на сервер MS Active Directory с файловой системой NTFS, у нас возникла проблема, заключающаяся в том, что скомпилированное приложение FoxPro больше не может записывать в файл.

При возникновении ошибки Process Monitor показывает следующий вывод:

Operation:   CreateFile
Result:   SHARING VIOLATION
Desired Access:  Generic Read/Write
Disposition:  OverwriteIf
Options:  Synchronous IO Non-Alert, Non-Directory File
Attributes:  N
ShareMode:  None
AllocationSize:  0

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


person John    schedule 15.06.2011    source источник
comment
Как создается таблица.... select * from into??? или создайте таблицу... или это всегда таблица... можете ли вы опубликовать некоторые фрагменты кода?   -  person DRapp    schedule 16.06.2011


Ответы (2)


Файл .IDX — это автономный индексный файл, содержащий один индекс, в отличие от .CDX, который представляет собой составной индексный файл, который может содержать несколько индексов.

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

В какой версии FoxPro/Visual FoxPro скомпилирован EXE?

Что такое клиентская и серверная ОС?

person Alan B    schedule 21.06.2011

Важно, какую ОС вы используете! Если программа работает на Windows Vista, 7 или Server 2008, вы не сможете создавать файлы везде, где хотите, без ограничений. Лучше всего создать этот временный индекс в каталоге TEMP пользователя. Там у вас всегда есть полные права на запись или удаление файлов. Если вы просто используете

INDEX ON batchno TO temp FOR !DELETED()

IDX будет создан в каталоге по умолчанию. Если это каталог C:\Program Files... UAC Windows не позволит записать его туда и перенаправит файл во временный каталог где-нибудь под c:\Windows. С помощью SYS(2023) вы можете получить каталог TEMP пользователя. Итак, попробуйте следующее:

INDEX ON batchno TO (SYS(2023) + "\temp.idx") FOR !DELETED()
person Feuerwehrler    schedule 14.08.2011