小弟最近为了做毕业设计狂学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
这样,如果我下次要加密的文件变了,那么代码中的"文件路径/文件名"会自动变吗?如果不变,我岂不是更改一次文件就要到代码窗口中更改代码吗?这样怎么给别人使用啊?求好心人帮我解决一下吧!!求求大家了!!!!!!!!!!!!!!!
小弟想对一文本文件的内容进行加密操作,现在已经做好了一个界面,在点击了“浏览”控件后,弹出一对话框,选好路径后,点击“打开”,则文本框显示出所选文件的路径,现在就要编“加密”控件的代码,可是小弟现在只知道“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
这样,如果我下次要加密的文件变了,那么代码中的"文件路径/文件名"会自动变吗?如果不变,我岂不是更改一次文件就要到代码窗口中更改代码吗?这样怎么给别人使用啊?求好心人帮我解决一下吧!!求求大家了!!!!!!!!!!!!!!!
解决方案 »
- 问个简单的问题:如何在win98系统下定时弹出对话框。
- 求救:在某些机器上,调用data report报表时候出现 “无效数据源”错误
- ◆◆◆发现 VB6里面 超级离谱的 BUG !!!!!! 对VB感到气愤和失望 ◆◆◆
- 转贴:写给浮躁的人(及初进论坛的人)
- DataGrid绑定出错?
- 为什么还有那么多人在做VB?
- 为什么装有sql server就不出问题了?
- 如何让ListView控件的图标显示在ListView控件右边????
- 急急!!!有关数据库的一些问题!!!谢谢(100分)
- 鼠标拖放控件,急!急!急!
- 关于选择打印机的问题
- ADORECORDSET进行事件find,查找的顺序一般是从1到最大,想叫查找的方向返回
另外,在你使用open语句打开文件的时候你可以为“文件路径/文件名”定义一个变量,先把用户选定的文件赋值给这个变量即可。
dim string1 as string
string1=commondialog.filename
可是“open "string1" for input as #1"这条语句不能用,双引号内的必须直接就是“文件路径/文件名”,编译系统会告诉你不存在“string"这个文件(也确实不存在),编译系统把变量名当文件名了!!到底怎么办啊?
string1=commondialog.filename
open string1 for input as #1谁叫你把变量名也加引号阿?加了引号这个变量名就变成字符串啦.楼主基础知识不过关阿
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
前辈这里教你的是好办法。如果你能把你的加密方法简单地说一说,或许前辈我能让你的加密程序快上那么几倍到几十倍也说不定喔。另外呢: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
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,就得了。记得编译之后再看速度,只要你不犯低级错误,速度还是蛮快的。好了!你自己说的给大家下跪了,如果还没被本姑娘气死,就赶紧磕头!
你前面说的那些话可是相当无理的,居然敢说前辈的程序是破程序,破程序也得有人给你写呀,真是岂有此理!
其实很简单,将app.path+"文件路径/文件名"换成CommonDialog.FileName就可以了。
把Byte数组转换为"XX XX XX XX ……"这样格式的十六进制字符串,用的是Byte数组到Byte数组的直接算法,不是传统的HEX函数和String操作。有完整的彼此互相转换的函数(目前还缺一些容错设计,一旦输入错误格式的文本会出错)。http://community.csdn.net/Expert/topic/3850/3850783.xml?temp=.2751276实际上上面的算法是本人擅长的“映射”类查表算法的一种应用,类似算法做简体、繁体;大写、小写是特别快的。
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控件
马上过去看