• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Tổng Quát về Các Lệnh Mở File

Các thủ thuật về hệ thống, thư mục, tập tin và mạng
Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

Tổng Quát về Các Lệnh Mở File

Gửi bàigửi bởi truongphu » T.Tư 30/04/2008 10:10 am

Thủ thuật: Tổng Quát về Các Lệnh Mở File
Tác giả: truongphu
Mô tả: Tổng Quát về Các Lệnh Mở File. Mong được các bạn giúp đở thêm bài viết vì chữ Tổng Quát "to' quá


A- Lệnh gọi thi hành
A- 1) Lệnh Shell: tham khảo VBLib

* Gọi trình WinWord, Phải có path của WINWORD.EXE. Theo thói quen, có thể bỏ phần ".exe" Ví dụ:

Mã: Chọn hết

  1. aaa = Shell("D:\Office\Microsoft Office\Office10\WINWORD", 1)


* Gọi trình WinWord và mở file doc nào đó:

Mã: Chọn hết

  1. aaa = Shell("D:\Office\Microsoft Office\Office10\WINWORD  C:\MùaThu~1.doc", 1)


Lưu ý: tên file không được có space, ví dụ sau sẽ không chạy được:

Mã: Chọn hết

  1. NotRun = Shell("D:\Office\Microsoft Office\Office10\WINWORD.EXE" "C:\Mùa Thu Lá bay", 1)


* Ta có thể dùng trình văn bản để mở một file bất kỳ, đọc thấy toàn mã máy:

Mã: Chọn hết

  1. aaa = Shell("C:\Program Files\Windows NT\Accessories\wordpad  c:\windows\system32\calc.exe", 1)


* Khi Shell gọi một trình của MS Windows (ví dụ calc.exe) trong các thư mục gốc hay hệ thống (windows\ hay windows\system32), do khi khởi động, biến môi trường đã nộp vào bộ nhớ nên ta có thể bỏ qua đường dẫn, bất kể trên máy nào đó có cài winXP ở đâu!

Mã: Chọn hết

  1. aaa = Shell ("calc")


hoặc gọn hơn nữa

Mã: Chọn hết

  1. Shell "calc"


nguyên tắc gọn nầy cũng dùng với các trình khác:

Mã: Chọn hết

  1. Shell "D:\Office\Microsoft Office\Office10\WINWORD"
  2. Shell "D:\Office\Microsoft Office\Office10\WINWORD  C:\MùaThu~1.doc"


A- 2) Lệnh ShellExecute:
ShellExecute là tự chạy một yêu cầu, có thể là một file, hay một câu lệnh, VỚI ĐIỀU KIỆN LÀ FILE ĐÓ, HAY CÂU LỆNH ĐÓ ĐÃ ĐƯỢC KHAI BÁO TRONG WINDOWS LÀ MỞ VỚI TRÌNH NÀO
Vậy thì một file hay một câu lệnh chưa đăng ký "Open With" thì ShellExecute cũng vô tác dụng!

Vì lý do trên, ta nên cân nhắc khi gọi ShellExecute, ví dụ muốn xem nội dung một file không có đuôi mở rộng, ta chỉ cần gọi Shell để chạy Notepad hay Wordpad load file cần xem, tránh khai báo rườm rà không cần thiết.

Khai báo hàm API:

Mã: Chọn hết

  1. Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile
  2.  
  3. As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
  4. Private Sub Form_Load()
  5. ShellExecute Me.hwnd, vbNullString, "C:\Mùa Thu Lá Bay.doc", vbNullString, "C:\", 1
  6. End Sub

Nhận xét: Tên file tự do

A- 3) VBScript
* Gọi một ứng dụng
Các dòng lệnh sau tương đương với các dòng lệnh của Shell:
Set objShell = CreateObject("Wscript.Shell")

Mã: Chọn hết

  1. objShell.Run "calc"
  2. objShell.Run ("ping 10.0.0.2")
  3. objShell.Run "WINWORD"
  4. objShell.Run "EXCEL"

Nhận xét: Tốn một câu khai báo: "Set objShell =...", nhưng khi chạy các ứng dụng đã đăng ký, ví dụ WinWord thì khỏi khai path, khác với Shell
* Mở một file văn bản

Mã: Chọn hết

  1. Set objword = CreateObject("Word.Application").Documents.Open("C:\Mùa Thu Lá Bay.Doc", 1)


B- Lệnh mở và thao tác trên file với thao tác cơ bản là Đọc, Ghi. Trong bài viết nầy chỉ minh họa thao tác Đọc
B- 1) Lệnh Open: tham khảo VBLib

a- Chuyên mở file TXT
trích VBLib:

Mã: Chọn hết

  1. Private Sub Form_Load()
  2. Dim TextLine
  3.     Open "TESTFILE" For Input As #1' Mo file Ðê Ðoc.
  4.         Do While Not EOF(1)
  5.             Line Input #1, TextLine' Ðoc tung dòng gán vào biên TextLine
  6.             Debug.Print TextLine' In ra màn hình
  7.         Loop
  8.     Close #1' Ðóng file.
  9. End Sub


b- Đọc text Unicode
trích VBLib: (trong VBLib phần nầy còn sót vài thành phần. Code sau đây hoàn chỉnh hơn)

Mã: Chọn hết

  1. Private Sub Form_Load()
  2. Dim fNum As Long, B() As Byte, fp
  3.     fp = "C:\Mùa Thu Lá Bay.txt"
  4.     fNum = FreeFile()
  5.     Open fp For Binary Access Read As #fNum
  6.         ReDim B(LOF(fNum))
  7.     Get #fNum, , B
  8.     Close #fNum
  9.  
  10.     Dim arr, i As Integer, s As String
  11.     arr = Split(B, vbCrLf)
  12.      For i = 0 To UBound(arr)
  13.             s = s & arr(i) & vbCrLf
  14.      Next i
  15. TextBox1 = s
  16. End Sub


B- 2) VBScript cho TXT: Tham khảo thêm Mục Tip VB
Đọc bất kể mã unicode! quá gọn

Mã: Chọn hết

  1. Private Function ReadFileUni(FileName As String) As String
  2. Dim FSO
  3.    Set FSO = CreateObject("Scripting.FileSystemObject").OpenTextFile(FileName, 1, , -2)
  4.    ReadFileUni = FSO.Readall
  5.    Set FSO = Nothing
  6. End Function
  7.  
  8. Private Sub Form_Load()
  9. TextBox1 = ReadFileUni("C:\Mùa Thu Lá Bay.txt")
  10. End Sub


B- 3) VBScript cho Doc (hoặc dưới nó như RTF, TXT): Tham khảo thêm Mục Tip VB

Mã: Chọn hết

  1. Private Sub Form_Load()
  2. Set objWord = CreateObject("Word.Application")
  3. objWord.ChangeFileOpenDirectory ("C:\")
  4. objWord.FileDialog(1).Title = "Select the files"
  5.  
  6. If objWord.FileDialog(1).Show = -1 Then
  7.     For Each objFile In objWord.FileDialog(1).SelectedItems
  8.         Set objDoc = objWord.Documents.Open(objFile)
  9.         objDoc.Range.Copy
  10.     Next
  11. End If
  12.  
  13. TextBox1.Paste
  14. objWord.Quit
  15. End Sub

Sáng 30/4/08 rảnh, chiều có thể nghỉ bù! :D

Bổ sung: Đọc file txt từng dòng

Mã: Chọn hết

  1. Private Function ReadLineText(FileName As String) As String
  2. Const ForReading = 1, ForWriting = 2, TriStateTrue = -2
  3. Dim FSO:    Set FSO = CreateObject("Scripting.FileSystemObject").OpenTextFile(FileName, 1, False, -2)
  4.    Do Until FSO.AtEndOfStream
  5.     ReadLineText = ReadLineText & FSO.ReadLine & vbCrLf
  6.    Loop
  7.    Set FSO = Nothing
  8. End Function
  9.  
  10. Private Sub Form_Load()
  11. MsgBox ReadLineText("C:\Mùa Thu Lá Bay.txt")
  12. End Sub
Sửa lần cuối bởi truongphu vào ngày T.Năm 01/05/2008 3:36 pm với 1 lần sửa.


o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

vinhphuoc91
Thành viên tích cực
Thành viên tích cực
Bài viết: 146
Ngày tham gia: T.Tư 26/03/2008 5:52 pm
Đến từ: Phú Yên
Been thanked: 15 time
Liên hệ:

Re: Tổng Quát về Các Lệnh Mở File

Gửi bàigửi bởi vinhphuoc91 » T.Năm 01/05/2008 2:12 pm

woa, cảm ơn pác truongphu, bài này nên đưa vào Các bài viết hướng dẫn, mà lần sau pác nhớ lồng thẻ code vào nhé :)
My website : http://tinthoitrang.net

Hình đại diện của người dùng
ngaymaikhongtan
Thành viên chính thức
Thành viên chính thức
Bài viết: 38
Ngày tham gia: T.Bảy 29/03/2008 12:05 pm
Đến từ: Cà Mau
Liên hệ:

Re: Tổng Quát về Các Lệnh Mở File

Gửi bàigửi bởi ngaymaikhongtan » T.Năm 01/05/2008 2:27 pm

Xin bác giới thiệu về phần đọc file txt rỏ hơn tí àh, phần đọc từng chuổi của nó trên từng dòng, không phải là truy xuất cả dòng, em đang viết bên vb.net!
welcome to
http://gocnhinviet.com

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

Re: Tổng Quát về Các Lệnh Mở File

Gửi bàigửi bởi truongphu » T.Năm 01/05/2008 3:41 pm

ngaymaikhongtan đã viết:Xin bác giới thiệu về phần đọc file txt rỏ hơn tí àh, phần đọc từng chuổi của nó trên từng dòng, không phải là truy xuất cả dòng,

Lệnh FSO.Readall sẽ thành lệnh FSO.ReadLine
Thêm Do Until FSO.AtEndOfStream
...
Loop để duyệt từng dòng
Các code khác như cũ. Tôi đã bổ sung ở trên, phần cuối bài
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

Re: Tổng Quát về Các Lệnh Mở File

Gửi bàigửi bởi truongphu » T.Hai 12/10/2009 8:25 am

Dùng lệnh Shell gọi Word ra để mở một file doc nguyên tắc là OK
Tuy nhiên khi thực hành bằng code, rất nhiều bạn thất bại, lý do:

1- Khai báo code chưa đúng
2- Đường dẫn WinWord dài bao nhiêu cũng được, nhưng đường dẫn file doc TUYỆT ĐỐI PHẢI 8.3
3- chưa hổ trợ tên file (hay đường dẫn) có tiếng Việt

Để đơn giản hóa vấn đề, tôi viết một Project: Dùng CommonDialog (khai bằng code) gọi lần lượt WinWord và File Doc, giao cho SHELL xử lý

Mã: Chọn hết

  1. Private Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal lBuffer As Long) As Long
  2.  
  3. Private Sub Command1_Click()
  4. Dim WordPath$
  5. MsgBox "Tìm WinWord o' Ðâu ?"
  6. WordPath = CDL(3, "D:\Office\Microsoft Office\OFFICE11")
  7. If WordPath = "" Then Exit Sub
  8. MsgBox "Tìm thâ'y Word.EXE o':" & vbCrLf & WordPath & vbCrLf & "Mo' File Word o' Ðâu ?" & vbCrLf & "(KHÔNG HÔ TRO' FILENAME TIÊ'NG VIÊT)"
  9. Shell WordPath & " " & ShortPath(CDL(, "D:\MY DOCUMENTS")), vbNormalFocus
  10. End Sub
  11.  
  12. Private Function ShortPath(ByVal FileName As String) As String
  13.     Dim lngRes As Long, strPath As String
  14.     'Create a buffer
  15.     strPath = String$(165, 0)
  16.     'retrieve the short pathname
  17.     lngRes = GetShortPathName(FileName, strPath, 164)
  18.     'remove all unnecessary chr$(0)'s
  19.     ShortPath = Left$(strPath, lngRes)
  20. End Function
  21.  
  22. Private Function CDL(Optional ByVal FilterNum As Integer = 1, Optional ByVal FirstDir As String = "D:\") As String
  23. Set Dialog = CreateObject("UserAccounts.CommonDialog")
  24. Dialog.Filter = "Word Document|*.Doc|Text File|*.txt|All Files|*.*"  '<-- các file cân loc
  25. Dialog.filterIndex = FilterNum '<- 1 là doc, 2 là text nhu' o' trên Ðã khai
  26. Dialog.InitialDir = FirstDir  '<-- Thay Ðôi thu' muc mac Ðinh
  27. Dialog.ShowOpen
  28. CDL = Dialog.FileName
  29. End Function


các bạn có thể dùng ngay Project nhẹ hều:
Tập tin đính kèm
Shell WinWord và ShortPath.rar
(1.74 KiB) Đã tải 720 lần
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

LearningVBnet
Bài viết: 5
Ngày tham gia: T.Tư 20/07/2011 12:00 am
Has thanked: 1 time

Re: Tổng Quát về Các Lệnh Mở File

Gửi bàigửi bởi LearningVBnet » T.Tư 20/07/2011 12:49 am

Bạn truongphu, tôi thấy các bài và câu trả lời của bạn rất hữu ích, chứng tỏ bạn có kiến thức khá rộng về VB và VB.net. Trước tôi có biết chút ít về VB và đang tự học VB.net. bạn có thể cho tôi biết địa chỉ email để liên lạc với bạn k0 vì tôi có vài câu hỏi muốn hỏi bạn nhờ bạn trả lời. tôi đề nghị như vậy vì không muốn bị coi là gửi spam, khi làm được rồi tôi sẽ post bài lên forum để mọi người cùng trao đổi kinh nghiệm. Cảm ơn truongphu!
Email của tôi: vutienphong.cdt1b@gmail.com
-----------------------
Xin lỗi! để học hỏi chứ không có ý định spam.

nguyentrinhthu
Thành viên tích cực
Thành viên tích cực
Bài viết: 105
Ngày tham gia: T.Tư 23/04/2008 8:43 am
Has thanked: 6 time
Been thanked: 1 time

Re: Tổng Quát về Các Lệnh Mở File

Gửi bàigửi bởi nguyentrinhthu » T.Sáu 25/11/2011 10:47 pm

công nhận bác truongphu siêu quá. Ai có tài chính đề nghị đóng góp cho diễn đàn để động viên các thành viên

Qsoft
Thành viên chính thức
Thành viên chính thức
Bài viết: 28
Ngày tham gia: T.Ba 30/03/2010 4:14 pm

Re: Tổng Quát về Các Lệnh Mở File

Gửi bàigửi bởi Qsoft » CN 11/12/2011 1:32 pm

Cảm ơn bác truongphu, tôi thấy nó gắn gọn và rất hữu ích. Hy vọng bác sẽ có nhiều bài viết hay nữa.

Hình đại diện của người dùng
khoaakt
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 75
Ngày tham gia: T.Ba 19/06/2012 6:30 pm
Đến từ: http://việtnam.vn/Kontum/Trường/THPT Chuyên Nguyễn Tất Thành.htm
Has thanked: 8 time
Been thanked: 7 time
Liên hệ:

Re: Tổng Quát về Các Lệnh Mở File

Gửi bàigửi bởi khoaakt » T.Năm 21/06/2012 5:55 pm

Bác Truongphu siêu ghê! Nhưng nếu ta dùng lệnh shell thì khi mở file exe thì cửa sổ lại để dạng Minimize?
Ai có cách khắc phục?

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

Re: Tổng Quát về Các Lệnh Mở File

Gửi bàigửi bởi truongphu » T.Sáu 22/06/2012 10:19 am

khoaakt đã viết:khi mở file exe thì cửa sổ lại để dạng Minimize?

Mã: Chọn hết

Shell "PathName", vbNormalFocus
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

vanthithuy91
Bài viết: 1
Ngày tham gia: T.Tư 09/01/2013 4:31 pm

Re: Tổng Quát về Các Lệnh Mở File

Gửi bàigửi bởi vanthithuy91 » T.Tư 09/01/2013 4:56 pm

Bác truongphu, em đang học cách giải một số bài toán trên vb. Em có một số thắc mắc muốn hỏi vì vậy em muốn xin địa chỉ email của bác không biết có được không? Nếu được bác gửi lại giúp em vào địa chỉ: bienxanhcuoi91@gmail.com mới ạ. Thanks!


Quay về “[VB] Hệ thống - Tập tin - Thư mục và Mạng”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.1 khách