VB DIR 提取长度超过256字节的文件名

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VB DIR 提取长度超过256字节的文件名相关的知识,希望对你有一定的参考价值。

VB6 用dir提取文件名

长度超过256字节后会报错

请问如何才能提取到?
一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七

这个文件名超过256字节吧?

使用FindFirstFile这个API函数可以解决此类问题。。。

以下是测试代码,花了半个小时,得加点分。。。

Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long

Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long

Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long

'最大路径长度和文件属性常量的定义

Private Const MAX_PATH = 260

Private Const FILE_ATTRIBUTE_ARCHIVE = &H20

   Const FILE_ATTRIBUTE_COMPRESSED = &H800

   Const FILE_ATTRIBUTE_DIRECTORY = &H10

   Const FILE_ATTRIBUTE_HIDDEN = &H2

   Const FILE_ATTRIBUTE_NORMAL = &H80

   Const FILE_ATTRIBUTE_READONLY = &H1

   Const FILE_ATTRIBUTE_SYSTEM = &H4

   Const FILE_ATTRIBUTE_TEMPORARY = &H100

  '自定义数据类型FILETIME和WIN32_FIND_DATA的定义

Private Type FILETIME

  dwLowDateTime As Long

  dwHighDateTime As Long

End Type

Private Type WIN32_FIND_DATA

    dwFileAttributes As Long

    ftCreationTime As FILETIME

    ftLastAccessTime As FILETIME

    ftLastWriteTime As FILETIME

    nFileSizeHigh As Long

    nFileSizeLow As Long

    dwReserved0 As Long

    dwReserved1 As Long

    cFileName As String * MAX_PATH

    cAlternate As String * 14

  End Type

Private Sub Command1_Click()

    Dim sPath$, strFileName$

    sPath = "C:\\Temp\\一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七.txt"

    Debug.Print "文件全路径长度:"; Len(sPath), "文件名长度:"; Len(sPath) - Len("C:\\Temp\\")

 

    Dim lHandle As Long     'FindFirstFileA的句柄

    Dim tFindData As WIN32_FIND_DATA '

    lHandle = FindFirstFile(sPath, tFindData)

    If lHandle = -1 Then

        If tFindData.dwFileAttributes <> &H20 Then   '文件 &H10 目录

            MsgBox "没有找到文件:" & vbCrLf & vbCrLf & sPath

        Else

            Debug.Print "文件名称:"; tFindData.cFileName

            Debug.Print "文件长度:"; tFindData.nFileSizeLow

        End If

    Else '查询结束或发生错误

        MsgBox "查询结束或发生错误"

        

    End If

    FindClose lHandle

End Sub

参考技术A 文件名不能超过256个字节的,这是windows的分区格式决定了的,每个分区的头部中都有目录和文件的链表,由于分区格式(FAT32 NTFS)决定了文件和目录的存放的最大长度不能超过256字节

因此放心好了,没有单个文件或目录的名称会超过256字节的
当然路径的总长度超过256字节是没有关系的,只是部分编程语言的编译器会处理出错

所以楼上兄弟的程序虽然实现了这个功能,但是没用的,因为在win下目前没有超过256字节的文件名。

如果一个文件名超过了256字节,操作系统不会同意建立,就算写程序通过操作磁盘直接写文件和目录表,也超过不了的。

个人理解,请兄弟们斧正!
参考技术B 好像Windows系统规定的最大文件名就是256个数字吧,你能建立一个256个字节以上的文件?这是不幸的。

回答者: 白木道人 - 高级魔法师 六级 2009-6-21 14:06
参考技术C 当然超过了。一个汉字2个字节,你总共168*2=336个字节的文件名,自然超过了。 参考技术D 好像Windows系统规定的最大文件名就是256个数字吧,你能建立一个256个字节以上的文件?这是不幸的。

BluetoothGattServer.sendResponse 中的数据长度不能超过 20 字节。 (低功耗蓝牙)

【中文标题】BluetoothGattServer.sendResponse 中的数据长度不能超过 20 字节。 (低功耗蓝牙)【英文标题】:The data length in BluetoothGattServer.sendResponse can't exceed 20 bytes. (BLE) 【发布时间】:2015-08-11 08:28:32 【问题描述】:

我已经根据g-ortuno 的工作尝试了在 Nexus 6 上运行的 BLE GATT 外设,它工作正常,但是 sendResponse 方法无法发送大于 20 字节的数据。 并为 writeCharacteristic 发现了同样的问题,它的 answer 对我不起作用。有没有人遇到同样的问题并知道可能的解决方案?谢谢。

【问题讨论】:

【参考方案1】:

发送超过20字节的数据,需要更改MTU-exchange。

到 API LEVEL 21,你可以使用 requestMtu,它与外围设备协商,你可以定义直到 512 字节。

MTU 值在外设端定义。请记住,您可以发送的数据大小是 MTU-3 字节。

对于小于 21 的 API LEVEL,MTU 是预定义的,您无法修改。

【讨论】:

以上是关于VB DIR 提取长度超过256字节的文件名的主要内容,如果未能解决你的问题,请参考以下文章

PHP有限内存处理大文件(从两个文件提取相同行)

PHP有限内存处理大文件(从两个文件提取相同行)

当 TLV 字段使用 3 字节长度格式时,CoreNFC 不会读取

PHP 警告:66192047 字节的 POST 内容长度超过了 8388608 字节的限制

如何使用 neon 访问超过 256 字节的查找表?

超过 256 长度的数字签名验证