Đường dẫn Dos 8.3

Các thủ thuật về hệ thống, thư mục, tập tin và mạng
Đăng trả lời
Hình đại diện của thành viên
truongphu
VIP
VIP
Bài viết: 4785
Ngày tham gia: Chủ nhật 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 528 times

Đường dẫn Dos 8.3

Gửi bài by truongphu »

Thủ thuật: Đường dẫn Dos 8.3
Tác giả: truongphu
Mô tả: Đường dẫn dạng Dos: tên file hay folder dài hơn 8 ký tự, hoặc có space đều được chuyển về 8 ký tự; vẫn còn hữu dụng trong VB6, ví dụ:

Mã: Chọn tất cả

Shell "C:\Program files\Microsoft Office\Office11\WINWORD.EXE " & [color=#BF0000]"C:\Progra~1\Phanme~1\MùaThu~1.Doc"[/color]
Forum chúng ta chưa có thủ thuật nầy, tôi xem các function tương tự, chỉ chuyển có phần tên file, không chuyển cả Path.
Function Path8_3 sau đây có các phần:
* xác định có hay không có đường dẫn file hoặc folder
* cách chuyển của Path file hay folder khác nhau
Ghi chú của điều hành viên:
Code chạy chính xác :

Mã: Chọn tất cả

Private Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal lBuffer As Long) As LongPublic Function GetShortPath(strFileName As String) As String    'KPD-Team 1999    'URL: http://www.allapi.net/    'E-Mail: KPDTeam@Allapi.net    Dim lngRes As Long, strPath As String    'Create a buffer    strPath = String$(165, 0)    'retrieve the short pathname    lngRes = GetShortPathName(strFileName, strPath, 164)    'remove all unnecessary chr$(0)'s    GetShortPath = Left$(strPath, lngRes)End FunctionPrivate Sub Form_Load()    ' File hay Folder phai có    MsgBox GetShortPath("C:\Documents and Settings\All Users\Application Data\Microsoft\HTML Help\Huong Dan1.doc")End Sub
Code gốc :

Mã: Chọn tất cả

 Private Function Path8_3(sPath As String) As String    If Dir(sPath) = "" And Dir(sPath, vbDirectory) = "" Then        Exit Function    Else ' truongphu        Dim Temp() As String, i As Byte            Temp = Split(sPath, "\")                If Dir(sPath) <> "" Then Temp(UBound(Temp)) = Left(Temp(UBound(Temp)), Len(Temp(UBound(Temp))) - 4)                    For i = 0 To UBound(Temp)                        If (InStr(Temp(i), " ")) Or (Len(Temp(i)) > 8) Then                            Temp(i) = Replace(Temp(i), " ", "")                            Temp(i) = Left(Temp(i), 6) & "~1"                        End If                    Next    End If    If Dir(sPath) <> "" Then Path8_3 = Join(Temp, "\") & Right(sPath, 4) Else Path8_3 = Join(Temp, "\")End Function Private Sub Command1_Click()Text1 = Path8_3("C:\Documents and Settings\All Users\Application Data\Microsoft\HTML Help\Huong dan.doc")End Sub
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh
Hình đại diện của thành viên
vo_minhdat2007
Quản trị
Quản trị
Bài viết: 2227
Ngày tham gia: Chủ nhật 17/07/2005 1:40 am
Has thanked: 13 times
Been thanked: 87 times
Tiếp xúc:

Re: Đường dẫn Dos 8.3

Gửi bài by vo_minhdat2007 »

Không ổn bác Phú ơi! Trước đây cháu định làm một hàm giống bác rồi, nhưng nó khó đấy!

VD : Trong thư mục cháu test có 2 file là FileTestThu1.txt và FileTestThu2.txt.

Và cháu nhập cả 2 file đều nhận về cùng 1 giá trị :
D:\Download\Functi~1\Functi~1\FileTe~1.txt
Mặc dù nếu đúng thì phải là :
D:\Download\Functi~1\Functi~1\FileTe~1.txt
D:\Download\Functi~1\Functi~1\FileTe~2.txt
P/S : Cái project bác đính kèm chưa sửa sự kiện cái button, phải sửa thành Text1.Text
Hình đại diện của thành viên
truongphu
VIP
VIP
Bài viết: 4785
Ngày tham gia: Chủ nhật 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 528 times

Re: Đường dẫn Dos 8.3

Gửi bài by truongphu »

vo_minhdat2007 đã viết:D:\Download\Functi~1\Functi~1\FileTe~1.txt
D:\Download\Functi~1\Functi~1\FileTe~2.txt
Bạn nói đúng, và tôi đã cân nhắc điều nầy:
* Trong trường hợp liệt kê file trong 1 folder mà tên file na ná giống nhau, ta phải phân biệt ~1 và ~2...
* Còn trong trường hợp chỉ đọc một path, "em" nào cũng sẽ được dịch là ~1
Sai số trong trường hợp nầy rất thấp, đến mức tôi không đưa vào câu: On Error ...

(còn nếu cầu toàn, xin hẹn phiên bản 2 :D )
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh
Hình đại diện của thành viên
truongphu
VIP
VIP
Bài viết: 4785
Ngày tham gia: Chủ nhật 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 528 times

Re: Đường dẫn Dos 8.3

Gửi bài by truongphu »

Phiên bản 2: API Guide ĐÃ VIẾT:

Mã: Chọn tất cả

Private Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal lBuffer As Long) As LongPublic Function GetShortPath(strFileName As String) As String    'KPD-Team 1999    'URL: http://www.allapi.net/    'E-Mail: KPDTeam@Allapi.net    Dim lngRes As Long, strPath As String    'Create a buffer    strPath = String$(165, 0)    'retrieve the short pathname    lngRes = GetShortPathName(strFileName, strPath, 164)    'remove all unnecessary chr$(0)'s    GetShortPath = Left$(strPath, lngRes)End FunctionPrivate Sub Form_Load()    ' File hay Folder phai có    MsgBox GetShortPath("C:\Documents and Settings\All Users\Application Data\Microsoft\HTML Help\Huong Dan1.doc")End Sub
Thỏa mãn yêu cầu bạn VMĐ
nhưng tôi hơi quê :"> :">
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh
hahuuhai
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 61
Ngày tham gia: Thứ 2 13/04/2009 8:38 am
Đến từ: Thạch Thành, Thanh Hóa

Re: Đường dẫn Dos 8.3

Gửi bài by hahuuhai »

Chào bác truongphu, cháu đọc thấy các bài viết của bác rất hay và dễ hiểu nữa.
Cháu có ý này không biết mọi người thấy thế nào, cháu đang hơi bận nên không thử ngay được, để lấy tên các file hay folder có tên na ná giống nhau, ta quét lấy tên tất cả các đối tượng (cùng loại file hay folder) trong cùng thư mục. Những cái có dạng giống nhau được đánh dấu theo thứ tự tăng dần: ~1, ~2...
Tiếp đến, ta kiểm tra xem file cần kiểm tra là file nào --> Cho ra kết quả...
Mong mọi người góp ý!
Kỳ này quyết theo học VB.Net và SQL Server 2k5.
Rất mong các bác giúp đỡ em chút...
Đăng trả lời

Quay về