??xml version="1.0" encoding="utf-8" standalone="yes"?>97se亚洲国产综合自在线,欧美精品三级,午夜视频在线免费http://www.aygfsteel.com/freebird/category/12591.htmlQ-Q-我喜Ƣ的学习资料收藏的宝圎ͼ学习W记的记录场圎ͼ交流的乐?/description>zh-cnTue, 27 Feb 2007 15:57:51 GMTTue, 27 Feb 2007 15:57:51 GMT60VB中文件操作的两种方式http://www.aygfsteel.com/freebird/archive/2006/07/15/58308.htmlfreebirdfreebirdSat, 15 Jul 2006 05:35:00 GMThttp://www.aygfsteel.com/freebird/archive/2006/07/15/58308.htmlhttp://www.aygfsteel.com/freebird/comments/58308.htmlhttp://www.aygfsteel.com/freebird/archive/2006/07/15/58308.html#Feedback0http://www.aygfsteel.com/freebird/comments/commentRss/58308.htmlhttp://www.aygfsteel.com/freebird/services/trackbacks/58308.html

1.文本文g的操?br /> 

此种方式是以行ؓ单位q行d的基本单位,主要应用的方法和函数有Open,Close,Line Input,FreeFileQEOF{。下面先q其功能然后l合代码CZq行说明?/font>

OpenQ顾名思义Q它的作用是打开文gQ换而言之打开某个文g是获得某个的控制权Q一般情况下当文件处于打开状态时只有打开者才能对它进行操作。打开文g时要指定一个整C为文件号Q以后的操作都是针对q个代号q行的,而不是针Ҏ件名。文件号也叫句柄Q在E序中一个文件号只能指向一个文Ӟ不能出现两个文g同时h相同句柄的情c?/font>

Close:关闭文gQ即释放文g的控制权?/font>

Line Input:以行为单位取得文件内容,以行为单位是指从当前位置开始到下一个换行符为止的内宏V换行符是Chr(13) & Chr(10)两个字节l成QVB中已定义了常量vbCrLfQ可直接使用。要注意的是Line Inputd一行时会把行尾的换行符LQ因此我们在d每行内容时要记得补上换行W才能保持得到的内容与文件一致?/font>

FreeFile:得到I闲的文件号Q用q个函数取得文g号可以避免文件号的冲H?/font>

例如Q?br />

     Dim strFileName As String '文g?/span> 
    
Dim  lngHandle  As   Long   ' 文g句柄 
    
Dim  strAll  As   String   ' 所d的文本文件的所有内?/span> 
    
Dim  strLine  As   String   ' 在@环中存放每行的内?/span> 
    
    strFileName 
=   " c:\b.txt " 
    
' 获得文g的句?/span> 
    lngHandle 
=  FreeFile()

    
' For后面的参数表CZ何种方式打开文gQInput是读取,Output是覆盖写入,Append是追加写?/span> 

    Open strFileName 
For  Input  As  lngHandle

    
' 循环直到文g?/span> 

    
Do   While   Not  EOF(lngHandle)
        
' 每次d一行存攑֜strLine变量?/span> 

        Line Input #lngHandle, strLine
        
' 每次d都把所d的内容连接到strAll变量Q由于Line InputL了换行符Q所以这里补?/span> 
        strAll 
=  strAll  &  strLine  &  vbCrLf
    
Loop 


    
' 昄得到的全部分内容
MsgBox  strAll, vbInformation

 
    Ҏ本文件的写入相对单些Q有三个步骤Q打开文gQ写入文本,关闭文g?br />
代码CZQ?br />
    
Dim  strFileName  As   String   ' 文g?/span> 

    
Dim  lngHandle  As   Long   ' 句柄 
    
Dim  strWrite  As   String   ' 要写入的文本内容 

    strFileName 
=   " c:\w.txt " 
    lngHandle 
=  FreeFile()  ' 取得句柄 

    
' 准备要写入的内容 
    strWrite 
=   " 落日楼头Q断鸿声里,江南游子。把吴钩看了Q栏q拍遍,无h会、登临意?/span> "   
    Open strFileName 
For  Output  As  lngHandle     ' 打开文g 
    Print #lngHandle, strWrite    
' 写入文本 
    Close lngHandle    
' 关闭文g 
MsgBox   " 写入完成?/span> " , vbInformation

常用到的一个函敎ͼ用来写日志用Q?br />

Sub  setLog(str  As   String )
' ---------
'
写日?/span>
'
---------
Open App.Path 
&   " \log\ "   &   CStr ( Date &   " _log.txt "   For  Append  As  # 1
Write #
1 , str
Close #
1
End Sub


二进制文件的操作
 

    所有文件的存储其实质都是二q制的,二进制文件往往׃部分l成Q一部分是文件头另一部分存放了文件的内容。文件头通常存放与文件格式有关的信息Q以BMP{图象文件ؓ例,它们的文件头中存放了是何U图形格式、图象大、调色板{信息,要显C图象时先读取文件头以获得文件的详细信息Q然后再按其格式把图象内ҎC出来。用二进制方式可以操作Q何的文gQ当然至关重要的一Ҏ要清楚了解所操作文g的文件头l构?/font>

   

    VB中二q制文g操作主要应用的方法和函数有:Open,Close,Get,Put{?/font>

OpenQ在For后面的打开模式要用Binary?/font>

Close:关闭文g?/font>

Get:在指定位|取得文件的内容Q如果省略位|则从当前位|读取?/font>

Put:在指定位|写入文Ӟ如果省略位置参数׃当前位置写?/font>

    下面l合代码讲解二进制文件的操作?/font>

下述E序完成了将两个文gl合成一个文件以及将q个l合后的文g再拆分成原来的两个文件。文件头的结构是自己定义的,非常单,?个字节(也就是两个长整型的长度)Q前4个字节存攄一个文件的长度Q后4个字节存攄二个文g的长度。ؓ了更直观地表达文件的l构Q现假设有两个文ӞW一个文仉度是100字节Q第二个文g?00字节Q那么合q后得到的文件应该是308字节。按序来看Q文件的l构是:

4W一文g的长?/font>

4W二文g的长?/font>

100W一文g的二q制内容

200W二文g的二q制内容

除了文g头的8字节长度是固定的后面的长度都会因文g的不同而变化的?/font>

‘实现文件的合ƈ

 

Private   Sub  MergeFile()

    
Dim  strFileName1  As   String   ' W一个文?/span> 

    
Dim  strFileName2  As   String   ' W二个文?/span> 
    
Dim  strOutput  As   String   ' 合ƈ后的文g 
    
Dim  aryContent()  As   Byte   ' 用来d文g的数l,每次d前要重定?/span> 
   
    strFileName1 
=   " c:\a.bmp " 
    strFileName2 
=   " c:\b.bmp " 
    strOutput 
=   " c:\out.bmp " 

    
' 注意下面三个Open语句都是用Binary模式打开?/span> 
    Open strOutput 
For  Binary  As  # 100    
    Open strFileName1 
For  Binary  As  # 1 
    Open strFileName2 
For  Binary  As  # 2 

    Put #
100 , , LOF( 1 ' 取得W一文g的长度,q把它写入到合ƈ文g的文件头?/span> 
    Put #
100 , , LOF( 2 ' 取得W二文g的长度,q写入到合ƈ文g的文件头?/span> 

    
ReDim  aryContent(LOF( 1 -   1 ' 重定义数l,取文件做准备 
    
Get  # 1 , , aryContent()  ' 取得W一文g的内容到数组 

    Put #
100 , , aryContent()  ' 把第一文g的内容写到合q文件中 

    
ReDim  aryContent(LOF( 2 -   1 )

    
Get  # 2
, , aryContent()
    Put #
100
, , aryContent()

    
' 关闭文g 

    Close #
1 
    Close #
2 
    Close #
100
End Sub
实现文g的拆?/font>
Private   Sub  SplitFile()

    
Dim  strFileName1  As   String 

    
Dim  strFileName2  As   String 
    
Dim  strFileSplit  As   String 
    
Dim  aryContent()  As   Byte 
    
Dim  lngLOF( 1 As   Long   ' 存放从文件头取得的两个文件的长度
    strFileName1 
=   " c:\a2.bmp " 
    strFileName2 
=   " c:\b2.bmp " 
    strFileSplit 
=   " c:\out.bmp " 

    Open strFileSplit 
For  Binary  As  # 100 

    
Get  # 100 , , lngLOF( 0 ' 取得W一文g的长?/span> 
    
Get  # 100 , , lngLOF( 1 ' W二文g的长?/span> 

    Open strFileName1 
For  Binary  As  # 1 
    Open strFileName2 
For  Binary  As  # 2 

    
ReDim  aryContent(lngLOF( 0 ) - 1 ' 用第一文g的长度重定义数组QؓdW一文g做准?/span> 
    
Get  # 100 9 , aryContent()  ' 从第9字节Q即文g后面开始读取第一文g的内?/span> 
    Put #
1 , , aryContent()  ' 把取得的内容写入到拆分文件中 

    
ReDim  aryContent(lngLOF( 1 ) - 1 )

    
Get  # 100 9   +  lngLOF( 0 +   1 , aryContent()  ' 从第9字节再加上第一文g的长度处开始读取第二文件的内容Q这里可以清楚地看到文g头的作用?/span>


    Put #
2 , , aryContent

    Close #
1 

    Close #
2 
    Close #
100 
    
MsgBox   " 拆分完成?/span> " , vbInformation
文本文g׃没有格式所以它的读写都比较单和直观Q而用二进制操作文件时其实质就是对文g头的理解Q如果不知道文g头的l构那就无法Ҏ件进行处理了Q知道了文g头所包含的信息后Q对文g的操作其实就是按规则q行Get、Put|了?/font>

freebird 2006-07-15 13:35 发表评论
]]>
如何用CommonDialog实现只选择路径Q{载)http://www.aygfsteel.com/freebird/archive/2006/07/03/56234.htmlfreebirdfreebirdMon, 03 Jul 2006 01:06:00 GMThttp://www.aygfsteel.com/freebird/archive/2006/07/03/56234.htmlhttp://www.aygfsteel.com/freebird/comments/56234.htmlhttp://www.aygfsteel.com/freebird/archive/2006/07/03/56234.html#Feedback0http://www.aygfsteel.com/freebird/comments/commentRss/56234.htmlhttp://www.aygfsteel.com/freebird/services/trackbacks/56234.html 用CommonDialog实现只选择路径:
   
Private Declare Function SHBrowseForFolder Lib "shell32.dll" Alias "SHBrowseForFolderA" (LpBrowseInfo As BROWSEINFO) As Long 
Private Declare Function SHGetPathFromIDlist Lib "shell32.dll" Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As StringAs Long 
Private Type BROWSEINFO 
  hOwner 
As Long 
  pidlroot 
As Long 
  pszDisplayName 
As String 
  lpszTitle 
As String 
  ulFlags 
As Long 
  lpfn 
As Long 
  lparam 
As Long 
  iImage 
As Long 
End Type 
Public Function GetFolder(Optional Title As String, Optional hwnd) As String 

    
Dim bi As BROWSEINFO 
    
Dim pidl As Long 
    
Dim folder As String 
     
folder 
= Space(255
     
With bi 
   
If IsNumeric(hwnd) Then .hOwner = hwnd 
   .ulFlags 
= BIF_RETURNONLYFSDIRS 
   .pidlroot 
= 0 
   
If Title <> "" Then 
      .lpszTitle 
= Title & Chr$(0
   
Else 
      .lpszTitle 
= "选择目录" & Chr$(0
    
End If 
End With 

pidl 
= SHBrowseForFolder(bi) 
If SHGetPathFromIDlist(ByVal pidl, ByVal folder) Then 
    GetFolder 
= Left(folder, InStr(folder, Chr$(0)) - 1
Else 
    GetFolder 
= "" 
End If 
End Function 
\'调用方式 
\'FilePath=GetFolder("打开一个目?, Form1.hwnd)


freebird 2006-07-03 09:06 发表评论
]]>
vb 实现查找q程http://www.aygfsteel.com/freebird/archive/2006/06/28/55519.htmlfreebirdfreebirdWed, 28 Jun 2006 05:17:00 GMThttp://www.aygfsteel.com/freebird/archive/2006/06/28/55519.htmlhttp://www.aygfsteel.com/freebird/comments/55519.htmlhttp://www.aygfsteel.com/freebird/archive/2006/06/28/55519.html#Feedback0http://www.aygfsteel.com/freebird/comments/commentRss/55519.htmlhttp://www.aygfsteel.com/freebird/services/trackbacks/55519.html vb查找q程Q用到的API函数?br />
Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long

Private Declare Function Process32First Lib "kernel32" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long

Private Declare Function Process32Next Lib "kernel32" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long

Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal blnheritHandle As Long, ByVal dwAppProcessId As Long) As Long

Private Declare Function TerminateProcess Lib "kernel32" (ByVal ApphProcess As Long, ByVal uExitCode As Long) As Long

Private Type PROCESSENTRY32

dwSize As Long

cntUsage As Long

th32ProcessID As Long

th32DefaultHeapID As Long

th32ModuleID As Long

cntThreads As Long

th32ParentProcessID As Long

pcPriClassBase As Long

dwFlags As Long

szExeFile As String * 1024

End Type

Private Const TH32CS_SNAPHEAPLIST = &H1

Private Const TH32CS_SNAPPROCESS = &H2

Private Const TH32CS_SNAPTHREAD = &H4

Private Const TH32CS_SNAPMODULE = &H8

Private Const TH32CS_SNAPALL = (TH32CS_SNAPHEAPLIST Or TH32CS_SNAPPROCESS Or TH32CS_SNAPTHREAD Or TH32CS_SNAPMODULE)

Private Const TH32CS_INHERIT = &H80000000


Private Declare Function RegisterWindowMessage Lib "user32" Alias "RegisterWindowMessageA" (ByVal lpString As String) As Long
Private WM_TASKBARCREATED As Long

'**********************************************************************
'在查扑և?br />'**********************************************************************
Private Function FindPro(jinchenming As String)
Dim my As PROCESSENTRY32
Dim l As Long
Dim l1 As Long
Dim mName As String

Dim I As Integer
l = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
If l Then
my.dwSize = 1060

If (Process32First(l, my)) Then '遍历开?/font>

Do
I = InStr(1, my.szExeFile, Chr(0))

mName = LCase(Left(my.szExeFile, I - 1))

If mName = jinchenming Then

PID = my.th32ProcessID

pname = mName

Dim mProcID As Long

mProcID = OpenProcess(1&, -1&, PID)

MsgBox pname
'TerminateProcess mProcID, 0&
 

Exit Function
End If
Loop Until (Process32Next(l, my) < 1)
End If
l1 = CloseHandle(l)
End If
End Function



freebird 2006-06-28 13:17 发表评论
]]>
վ֩ģ壺 Դ| | | | ̶| | | | | Ԫ| | ޵| Դ| | | | | ̩| | | | | ̨| Դ| | | Ӧ| | ˳ƽ| ̨ǰ| | ֽ| | ׯ| | | | | | | |