我们有以下Visual FoxPro 9代码行
INDEX ON batchno TO temp FOR !DELETED()
我们遇到一个问题,FoxPro编译的应用程序将运行,尝试枚举文件夹的内容,查找临时文件,创建临时文件(数据库名为temp.idx),然后继续进行进一步处理引用临时数据。
当我们在具有NFS文件系统的Novell目录服务器上时,这似乎工作正常。但是,现在我们已经转移到具有NTFS文件系统的MS Active Directory服务器,我们遇到了一个问题,即编译的FoxPro应用程序无法再写入该文件。
进程监视器在发生错误时显示以下输出:
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
我很好奇是否有另一种方法来处理这种情况,我们不必担心应用程序在尝试写入文件时保持文件正在使用(可能是读取),因为它是已经在使用中。
答案 0 :(得分:0)
是权限问题 - 以网络管理员身份运行时是否有效?
什么版本的FoxPro / Visual FoxPro是EXE编译的?
什么是客户端和服务器操作系统?
答案 1 :(得分:0)
您使用的操作系统非常重要!如果程序在Windows Vista,7或Server 2008上运行,则无法在没有限制的情况下随处创建文件。 最好的方法是在用户的TEMP-Directory中创建此临时索引。在那里,您始终拥有写入或删除文件的完整权限。 如果您只是使用
INDEX ON batchno TO temp FOR !DELETED()
IDX将在默认目录中创建。如果此目录是C:\ Program Files ... Windows的UAC将不允许在那里写入它并将文件重定向到c:\ Windows下的某个临时目录。 使用SYS(2023),您可以获得用户的TEMP-Directory。 所以试试这个:
INDEX ON batchno TO (SYS(2023) + "\temp.idx") FOR !DELETED()