关于DBF的文件名长度限制问题

2009年07月20日

我们知道dbf遵循早期的8.3文件名格式,对于文件名超过8个字符(注意,是八个字符)的文件读取不正常,解决这个问题用了两个方案

1.采用ole db驱动连接数据库,但是对长文件名文件的读取不成功.

2.采用odbc驱动连接数据库,还是不行,上网更新了驱动,下载vfpodbc.dll文件,读取成功问题解决了.

事 情也许就应该这样结束了,但是又出了新的问题,为了保证效率,一部分代码需要进行access和dbf两种数据库的联查,access之间的跨库查询应该 这样写UPDATE [;DataBase=” + m_GISDatabasePath + “;Pwd=;].分 区 SET FIELD5 = ‘NULL’

改为dbf之后这样写SELECT * FROM [dBASE IV;Database=F:\VSS-cnp40\02Data\;] .table1 但是文件名长度限制的问题又出现了,

换驱动?试了很多办法一直行不通,哪位如果知道可以告诉我,不胜感激:)

和 同事讨论了很久,受到了一个启发,在dos下查看文件是,windows会自动得到短文件名,类似于这样”地区~1.CON”,就依照这个思路做下去,去 到文件的短文件名,然后试试SELECT * FROM [dBASE IV;Database=F:\VSS-cnp40\02Data\;]. [新 6C38~1]

接下来的事情就容易了,只要取得文件的短文件名就可以,windows api提供了这个函数GetShortPathName

在C#中这样实现

[DllImport(“Kernel32″, CharSet = CharSet.Auto)] public static extern Int32 GetShortPathName(string path, StringBuilder shortPath, Int32 shortPathLength);

好的,就这样