2011-06-15 99 views
0

我们拥有的Visual FoxPro 9码FoxPro的临时文件问题

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

表是如何创建的.... select * from into ???或创建表...或者它总是有一个表...你可以发布一些代码段? – DRapp 2011-06-16 01:28:45

回答

0

.IDX文件是一个包含一个索引的独立索引文件,与.CDX相反,该文件是一个可包含许多索引文件的复合索引文件。

它是一个权限问题 - 当它作为网络管理员运行时是否工作?

什么版本的FoxPro/Visual FoxPro是EXE编译的?

什么是客户端和服务器操作系统?

0

您正在使用的操作系统很重要!如果程序在Windows Vista,7或Server 2008上运行,则无法在任何地方无限制地创建文件。 最好的方法是在用户的TEMP目录中创建此临时索引。在那里你总是有充分的权利来写或删除文件。 如果只是用

INDEX ON batchno TO temp FOR !DELETED() 

的IDX将在默认目录中创建。如果这个目录是C:\ Program Files文件... Windows的UAC将不允许将它写入并将文件重定向到c:\ Windows下的某个临时目录。 使用SYS(2023),您可以获取用户的TEMP目录。 所以试试这个:

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