小弟最近为了做毕业设计狂学VB,并且已经吐血斗升,但还是没达到理想效果,有个问题请教一下:
小弟想对一文本文件的内容进行加密操作,现在已经做好了一个界面,在点击了“浏览”控件后,弹出一对话框,选好路径后,点击“打开”,则文本框显示出所选文件的路径,现在就要编“加密”控件的代码,可是小弟现在只知道“open "文件路径/文件名" for input as #1" 这样的函数可以将选中的文件读入内存,可是“文件路径/文件名”这一项时刻在变,我总不能每用一次这个系统就把代码更改一下吧!!各位高手教教怎样才能解决麻烦呢?
例如我在“加密”控件代码中将文本文件内容(假设是一串字符串)赋给字符串变量String2,这样写:
private sub command1_click()
dim string1 as string,string2 as string
open app.path+"文件路径/文件名" for input as #1
do while not EOF(1)
line input #1,string1
string2=string2 & string1
loop
close #1
end sub
这样,如果我下次要加密的文件变了,那么代码中的"文件路径/文件名"会自动变吗?如果不变,我岂不是更改一次文件就要到代码窗口中更改代码吗?这样怎么给别人使用啊?求好心人帮我解决一下吧!!求求大家了!!!!!!!!!!!!!!!

解决方案 »

  1.   

    使用通用对话框控件(CommonDialog)的filename属性,当你选择了文件后,filename属性为你当前选定文件的全路径文件名。
    另外,在你使用open语句打开文件的时候你可以为“文件路径/文件名”定义一个变量,先把用户选定的文件赋值给这个变量即可。
      

  2.   

    我懂你的意思,可我这样试过
    dim string1 as string
    string1=commondialog.filename
    可是“open "string1" for input as #1"这条语句不能用,双引号内的必须直接就是“文件路径/文件名”,编译系统会告诉你不存在“string"这个文件(也确实不存在),编译系统把变量名当文件名了!!到底怎么办啊?
      

  3.   

    是不是应该是这样?open string1 for input as #1
      

  4.   

    dim string1 as string
    string1=commondialog.filename
    open string1 for input as #1谁叫你把变量名也加引号阿?加了引号这个变量名就变成字符串啦.楼主基础知识不过关阿
      

  5.   

    看看下面的例子吧:FileRead.vbp文件内容:Type=Exe
    Form=frmFileRead&Write.frm
    Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#C:\WINDOWS\SYSTEM\stdole2.tlb#OLE Automation
    Object={F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0; COMDLG32.OCX
    Startup="Form1"
    Command32=""
    Name="工程1"
    HelpContextID="0"
    CompatibleMode="0"
    MajorVer=1
    MinorVer=0
    RevisionVer=0
    AutoIncrementVer=0
    ServerSupportFiles=0
    VersionCompanyName="KiteGirl"
    CompilationType=0
    OptimizationType=0
    FavorPentiumPro(tm)=0
    CodeViewDebugInfo=0
    NoAliasing=0
    BoundsCheck=0
    OverflowCheck=0
    FlPointCheck=0
    FDIVCheck=0
    UnroundedFP=0
    StartMode=0
    Unattended=0
    Retained=0
    ThreadPerObject=0
    MaxNumberOfThreads=1frmFileRead&Write.frm文件内容:VERSION 5.00
    Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0"; "COMDLG32.OCX"
    Begin VB.Form Form1 
       BackColor       =   &H00C89664&
       Caption         =   "文件"
       ClientHeight    =   2685
       ClientLeft      =   60
       ClientTop       =   345
       ClientWidth     =   5220
       LinkTopic       =   "Form1"
       ScaleHeight     =   2685
       ScaleWidth      =   5220
       StartUpPosition =   3  '窗口缺省
       Begin VB.Frame Frame1 
          Appearance      =   0  'Flat
          BackColor       =   &H00C89664&
          Caption         =   "文件"
          ForeColor       =   &H80000008&
          Height          =   1695
          Left            =   120
          TabIndex        =   0
          Top             =   120
          Width           =   4935
          Begin VB.TextBox tbFileName 
             Appearance      =   0  'Flat
             BackColor       =   &H0000FFC0&
             Height          =   270
             Left            =   120
             TabIndex        =   7
             Top             =   240
             Width           =   4695
          End
          Begin VB.CommandButton cbFileSave 
             Caption         =   "保存……"
             Height          =   255
             Left            =   1320
             TabIndex        =   2
             Top             =   600
             Width           =   1095
          End
          Begin VB.CommandButton cbFileOpen 
             Caption         =   "打开……"
             Height          =   255
             Left            =   120
             TabIndex        =   1
             Top             =   600
             Width           =   1095
          End
          Begin VB.Label lbLineCount 
             Appearance      =   0  'Flat
             BackColor       =   &H00C89664&
             ForeColor       =   &H80000008&
             Height          =   255
             Left            =   720
             TabIndex        =   6
             Top             =   1320
             Width           =   1695
          End
          Begin VB.Label Label4 
             Appearance      =   0  'Flat
             BackColor       =   &H00C89664&
             Caption         =   "行数:"
             ForeColor       =   &H80000008&
             Height          =   255
             Left            =   120
             TabIndex        =   5
             Top             =   1320
             Width           =   615
          End
          Begin VB.Label lbTextSize 
             Appearance      =   0  'Flat
             BackColor       =   &H00C89664&
             ForeColor       =   &H80000008&
             Height          =   255
             Left            =   720
             TabIndex        =   4
             Top             =   960
             Width           =   1815
          End
          Begin VB.Label Label3 
             Appearance      =   0  'Flat
             BackColor       =   &H00C89664&
             Caption         =   "容量:"
             ForeColor       =   &H80000008&
             Height          =   255
             Left            =   120
             TabIndex        =   3
             Top             =   960
             Width           =   615
          End
       End
       Begin MSComDlg.CommonDialog cdCommonDialog 
          Left            =   120
          Top             =   2040
          _ExtentX        =   847
          _ExtentY        =   847
          _Version        =   393216
       End
    End
    Attribute VB_Name = "Form1"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = True
    Attribute VB_Exposed = FalsePrivate priFileName As String
    Private priFileText As StringPrivate Sub cbFileOpen_Click()
      Dim tFileName As String
      
      With Err
        .Clear
      End With
      
      With cdCommonDialog
        On Error Resume Next
        .CancelError = True
        .Filter = "文本文件|*.txt|所有文件|*.*"
        .FileName = App.Path & "\*.txt"
        .ShowOpen
        tFileName = .FileName
      End With
      
      Dim tCheck_FileNameChange As Boolean
      
      tCheck_FileNameChange = tFileName <> ""
      
      If tCheck_FileNameChange Then
        priFileName = tFileName
        tbFileName = priFileName
        priFileText = TextGetByFile(priFileName)
        FileInfoShow
      End If
      
    End SubPrivate Sub cbFileSave_Click()
      Dim tFileName As String
      
      With Err
        .Clear
      End With
      
      With cdCommonDialog
        On Error Resume Next
        .CancelError = True
        .Filter = "文本文件|*.txt|所有文件|*.*"
        .ShowSave
        tFileName = .FileName
      End With
      
      Dim tCheck_FileNameChange As Boolean
      
      tCheck_FileNameChange = tFileName <> ""
      
      If tCheck_FileNameChange Then
        priFileName = tFileName
        tbFileName = priFileName
        TextPutToFile priFileName, priFileText
      End If
      
    End SubPrivate Sub FileInfoShow()
      Dim tBytes() As Byte
      Dim tBytes_Length As Long
      Dim tBytes_Size As Long
      Dim tStrings() As String
      Dim tStrings_Length As Long
      Dim tStrings_Count As Long
      
      tBytes() = StrConv(priFileText, vbFromUnicode)
      tBytes_Length = UBound(tBytes())
      tBytes_Size = tBytes_Length + 1
      tStrings() = Split(priFileText, vbCrLf)
      tStrings_Length = UBound(tStrings())
      tStrings_Count = tStrings_Length + 1
      
      lbTextSize.Caption = tBytes_Size & "字节"
      lbLineCount.Caption = tStrings_Count & "行"
      
    End SubPrivate Sub TextPutToFile(ByVal pFileName As String, ByVal pText As String)
     
      Dim tBytes() As Byte
      
      tBytes() = StrConv(pText, vbFromUnicode)
      BytesPutToFile pFileName, tBytes()
      
    End SubPrivate Function TextGetByFile(ByVal pFileName As String) As String
      Dim tOutText As String
      
      Dim tBytes() As Byte
      
      tBytes() = BytesGetByFile(pFileName)
      tOutText = StrConv(tBytes(), vbUnicode)
      
      TextGetByFile = tOutText
    End FunctionPrivate Sub BytesPutToFile(ByVal pFileName As String, ByRef pBytes() As Byte)
      Dim tFileNumber As Integer
      
      tFileNumber = FreeFile
      
      Open pFileName For Binary As #tFileNumber
      
        Put #tFileNumber, 1, pBytes()
        
      Close #tFileNumber
      
    End SubPrivate Function BytesGetByFile(ByVal pFileName As String) As Byte()
      Dim tOutBytes() As Byte
      Dim tFileNumber As Integer
      
      tFileNumber = FreeFile
      
      Open pFileName For Binary As #tFileNumber
        
        Dim tOutBytes_Length As Long
        Dim tFileSize As Long
        
        tFileSize = LOF(tFileNumber)
        tOutBytes_Length = tFileSize - 1
        
        ReDim tOutBytes(tOutBytes_Length)
        
        Get #tFileNumber, 1, tOutBytes()
        
      Close #tFileNumber
      
      BytesGetByFile = tOutBytes()
    End FunctionPrivate Sub Form_Load()End Sub
     
      tFileNumber = FreeFile
      
      Open pFileName For Binary As #tFileNumber
        
        Dim tOutBytes_Length As Long
        Dim tFileSize As Long
        
        tFileSize = LOF(tFileNumber)
        tOutBytes_Length = tFileSize - 1
        
        ReDim tOutBytes(tOutBytes_Length)
        
        Get #tFileNumber, 1, tOutBytes()
        
      Close #tFileNumber
      
      BytesGetByFile = tOutBytes()
    End Function
      

  6.   

    小弟弟!对待老前辈要谦虚,懂吗?虽然本人年纪不大,可以用Open语句已经有十多年了。前辈跟你开个玩笑,你至于唧唧歪歪成这样吗?真是不懂礼貌的孩子:)TextPutToFile和TextGetByFile是读写文件的文本的(此处所谓Text就是带换行的文本)。BytesPutToFile和BytesGetByFile是读写文件的Byte的。如果用你的Line Input方法读文本文件,小一点的还可以,如果是好几十万行大文本要死机的。
    前辈这里教你的是好办法。如果你能把你的加密方法简单地说一说,或许前辈我能让你的加密程序快上那么几倍到几十倍也说不定喔。另外呢:Private Sub Form_Load()后面的代码是多余的,给你拷多了。自己删去吧。Private Sub TextPutToFile(ByVal pFileName As String, ByVal pText As String)
     
      Dim tBytes() As Byte
      
      tBytes() = StrConv(pText, vbFromUnicode)
      BytesPutToFile pFileName, tBytes()
      
    End SubPrivate Function TextGetByFile(ByVal pFileName As String) As String
      Dim tOutText As String
      
      Dim tBytes() As Byte
      
      tBytes() = BytesGetByFile(pFileName)
      tOutText = StrConv(tBytes(), vbUnicode)
      
      TextGetByFile = tOutText
    End FunctionPrivate Sub BytesPutToFile(ByVal pFileName As String, ByRef pBytes() As Byte)
      Dim tFileNumber As Integer
      
      tFileNumber = FreeFile
      
      Open pFileName For Binary As #tFileNumber
      
        Put #tFileNumber, 1, pBytes()
        
      Close #tFileNumber
      
    End SubPrivate Function BytesGetByFile(ByVal pFileName As String) As Byte()
      Dim tOutBytes() As Byte
      Dim tFileNumber As Integer
      
      tFileNumber = FreeFile
      
      Open pFileName For Binary As #tFileNumber
        
        Dim tOutBytes_Length As Long
        Dim tFileSize As Long
        
        tFileSize = LOF(tFileNumber)
        tOutBytes_Length = tFileSize - 1
        
        ReDim tOutBytes(tOutBytes_Length)
        
        Get #tFileNumber, 1, tOutBytes()
        
      Close #tFileNumber
      
      BytesGetByFile = tOutBytes()
    End Function
      

  7.   

    最后前辈我再教教你:前面说过:BytesPutToFile和BytesGetByFile是读写文件的Byte的。如果你想加密的话不至于对String操作,只要对Byte数组操作就可以了,速度是相当快的。比方说在小学时候老师曾经对你讲过的XOR加密:)。你只要这样:先BytesGetByFile出来文件的BytesDim tIndex As Long
    Dim tBytes_Length As Long
    Dim tKeyByte As BytetKeyByte=你需要的密钥,可以是0-255之间的一个数字。tBytes_Length=Ubound(tBytes()) 'tBytes()是你获得的文件byte。For tIndex=0 To tBytes_Length
      tBytes(tIndex)=tBytes(tIndex) XOR tKeyByte
    Next然后你把tBytes()给BytesPutToFile,就得了。记得编译之后再看速度,只要你不犯低级错误,速度还是蛮快的。好了!你自己说的给大家下跪了,如果还没被本姑娘气死,就赶紧磕头!
    你前面说的那些话可是相当无理的,居然敢说前辈的程序是破程序,破程序也得有人给你写呀,真是岂有此理!
      

  8.   

    我狂晕,变成遗容了。
    其实很简单,将app.path+"文件路径/文件名"换成CommonDialog.FileName就可以了。
      

  9.   

    To lsftest():快速HEX算法:
    把Byte数组转换为"XX XX XX XX ……"这样格式的十六进制字符串,用的是Byte数组到Byte数组的直接算法,不是传统的HEX函数和String操作。有完整的彼此互相转换的函数(目前还缺一些容错设计,一旦输入错误格式的文本会出错)。http://community.csdn.net/Expert/topic/3850/3850783.xml?temp=.2751276实际上上面的算法是本人擅长的“映射”类查表算法的一种应用,类似算法做简体、繁体;大写、小写是特别快的。
      

  10.   

    Private Sub Command1_Click()
    On Error GoTo err1
    i$ = InputBox("输入文件名", "文件名")
    Open App.Path & i$ For Input As #1
    Do While Not EOF(1)
      Line Input #1, text$
      Text1.text = Text1.text & text$
    Loop
    Close #1
    Exit Sub
    err1:
    MsgBox ("")
    End Sub测试过了,最好还是用commonDialog控件
      

  11.   

    thanks KiteGirl(小仙妹) 
    马上过去看