vbnet面试题的简单介绍

新手关于VB.net的问题

您好,在Visual Basic.NET中,是没有像这样的文件I/O操作的,一般都是通过System.IO.StreamReader和System.IO.StreamWriter类,System.IO.BinaryReader和System.IO.BinaryWriter类来读写文件以及利用My.Computer.FileSystem类读写文件,利用System.IO.Filestream类来创建文件,通过引用Microsoft Scripting Runtime来执行文件(夹)和驱动器的特殊操作,常用的是System.IO.StreamReader和System.IO.StreamWriter类。

成都创新互联公司-专业网站定制、快速模板网站建设、高性价比惠山网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式惠山网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖惠山地区。费用合理售后完善,十年实体公司更值得信赖。

例如说要读取一个文件,我们可以利用System.IO.StreamReader类编写一个方法(也就是函数),但是首先要在当前类的开头添加一个引用,引用名称:System.IO,添加引用的代码如下

Imports System.IO

添加引用之后,就在当前类的内部创建方法:

Private Function ReadFile(ByVal FileURL As String) As String

Dim sr As StreamReader = New StreamReader(FileURL)

ReadFile = sr.ReadToEnd()

sr.Close()

sr = Nothing

End Function

示例说明:

该方法是一个返回String(字符串)数据的函数,FileURL作为参数是用来存放需要访问的文件的URL,当然,要获取一个文件的URL,就是利用这一句代码实现的:

Dim sr As StreamReader = New StreamReader(FileURL)

当获取了URL之后,就要对文件进行读取操作了,然后将读取的结果返回给方法:

ReadFile = sr.ReadToEnd()

读取文件完毕之后,要对文件执行关闭操作:

sr.Close()

当然别忘了清理资源:

sr = Nothing

StreamReader类可以从流或文件中读取字符,在创建StreamREader类的对象时,可以指定一个流对象,也可以指定一个文件URL,创建对象后就可以调用他的方法,从流中读取数据,其常用方法如下:

Peek:返回下一个可用字符,但不使用它。

Read:读取输入流中下一个字符或一组字符并移动流或文件指针。

ReadBlock:从当前流中读取最大数量字符并从index开始将数据写入buffer。

ReadLine:从当前流中读取一行字符并将字符作为String返回。

REadToEnd:从流的当前位置到末尾读取流。

Close:关闭打开的对象,释放资源。

注:流,一种新的数据格式,这种格式可通过System.IO命名空间下的类访问。流用Stream类表示,所有的流都是从这个类中继承的。流向用户提供了一个一般的数据视图,隐藏了操作系统和底层设备的实现细节,所有的流都支持读写操作。在打开文件时将返回对应的流对象,用户可以对流对象进行读写操作。

如果要对文件执行按行读取操作,这时就会用到枚举,这时候,代码就要更改一下了:

Private Function ReadFile(ByVal FileURL As String) As String

Dim sr As StreamReader = New StreamReader(FileURL)

For Each fLine As String In sr.ReadToEnd()

Line = sr.ReadLine()

ReadFile = ReadFile fLine

Next sr.ReadLine

sr.Close()

End Function

示例说明:

For Each…Next:派生于For…Next循环,用于枚举一系列对象中的成员,而这些对象组成集合,如果集合中至少存在一个元素,程序就会静茹For Each块执行。其格式如下:

For Each 元素 [As 数据类型] In 元素集合

[循环体]

[Exit For]

[循环体]

Next [元素]

比如:

Dim CountNumber As ULong = 0

Dim FolderName() As String = New String() {" "}

For Each strFolder As String In My.Computer.FileSystem.GetDirectories("C:\")

CountNumber = CountNumber + 1

ReDim Preserve FolderName(1 To CountNumber)

FolderName = strFolder

Next strFolder

注:My.Computer.FileSystem.GetDirectories:主要用来枚举指定目录的子文件夹。

Preserve:主要用来避免重定义数组而不损失数组元素的原有数据。

另外,利用My.Computer.FileSystem也可以实现文件的读取,其代码如下:

Dim fpReader As String = My.Computer.FileSystem.ReadAllText("C:\test.txt")

示例说明:

定义一个字符串变量利用My.Computer.FileSystem.ReadAllText来实现对“C:\test.txt”的读取。

如果是已经编码的文本,则可以使用My.Computer.FileSystem对象中的ReadAllText方法并提供路径和文件编码类型,将文本写入字符串变量中,例如:

Dim fpReader As String = My.Computer.FileSystem.ReadAllText("C:\test.txt", _

System.Text.Encoding.UTF32)

当然,System.Text.Encoding的成员不止一个,它还有如下成员:

System.Text.Encoding.UTF8

System.Text.Encoding.UTF16

System.Text.Encoding.ASCII

System.Text.Encoding.Unicode

这些是常见的成员,也是主要的成员。

另外,利用My.Computer.Filesystem类无法实现文件的行操作,还有,如果您的计算机未安装完整的Microsoft.NET Framework Runtime,则无法实现这种操作!

写入文件的操作同样简单,Visual Basic.NET 允许用户使用StreamWriter来对文件写入内容,下面就让我们来创建一个子例程,来实现文件的写入:

Private Sub WriterFile(ByVal FileURL As String, ByVal FileCon As String)

Dim sr As StreamWriter = New StreamWriter(FileURL)

sr.Write(FileCon)

sr.Close()

sr = Nothing

End Sub

示例说明:

sr.Write(FileCon):将FileCon写入文件FileURL之中。

另外,StreamWriter常用方法如下:

WriteLine:向流中写入一行,后面跟结束符。

Write:写入流,向流对象中写入字符并移动流或文件指针。

Close:关闭打开的对象,释放资源。

附:Visual Basic 6.0文件操作解说:

打开: Open 文件名 For Input | Output | Append As [#]文件号

Input打开读入,文件不存在报错。Output打开覆盖写入,文件不存在则创建。Append打 开追加写入,文件不存在则创建。

读: Line Input #文件号, 字符串变量

读一行数据存入字符串变量,数据包括空格、Tab、等,不包括回车符和换行符,所以要显示文件的换行效果,要手动添加回车符和换行符(vbCrLf)

Input #文件号, 变量1[, | ;] [变量2]...

这种方式可以存入多个变量,而且变量类型不限于字符串型。

写: Print #文件号, 参数1[, | ;] [参数2]...

将各参数逐个写入文件。参数间用逗号隔开时,文件中相应插入多个空格;用分号隔开时,插入一个空格。可以用Spc(n)、Tab(n)等进行排版。

Write #文件号, 参数1[, | ;] [参数2]...

这种写入方式将自动添加界定符,对不同参数的类型加以界定。

Visual Basic 6.0文件操作函数:

Seek: Seek(文件号)

返回文件正在访问的位置,返回值为长整型。对顺序文件和二进制文件,返回值以字节为单位;对随机访问文件,返回值以记录号为单位。

Seek: Seek [#]文件号,位置

定位文件到指定位置。位置单位同上所述。

Input: Input (字节数,[#]文件号)

从文件的访问当前位置读入指定字节数的数据。仅适用于顺序文件和二进制文件。

EOF: EOF(文件号)

判断文件的访问位置是否在文件尾,如果是,返回True,否则,返回False。

LOF: LOF(文件号)

返回文件长度,单位为字节。

FileLen: FileLen (文件名)

返回文件名对应文件的长度,单位是字节。该函数取磁盘文件标识中的长度,即文件打开前的长度,可以取未打开的文件长度。

GetAttr: GetAttr (Pathname)

返回指定文件或文件夹的属性。

FileAttr: FileAttr (文件号)

返回文件号对应文件的打开方式。

GetDateTime: GetDateTime (Pathname)

返回文件被创建或修改的最后日期和时间。

Free: FreeFile[(0|1)]

返回未被占用的文件号,Free或Free(0)返回1~255之间未占用的文件号,Free(1)返回256~511之间未占用的文件。

Dir: Dir (Pathname [,Attributes])

测试指定路径是否有某文件,Attributes附加文件属性条件,取值vbNormal、vbReadOnly、vbHidden、vbSystem、vbVolume、vbDirectory。

Kill: Kill (文件名)

删除指定文件,文件名可包含路径。

FileCopy: FileCopy 源文件,目标文件

拷贝文件。

Name: Name 旧文件名 As 新文件名

文件重命名。前后路径不一致时,操作为移动文件并重命名。

MkDir: MkDir path

新建文件夹。

RmDir: Rmdir path

删除文件夹。

ChDrive: ChDrive Drive

改变当前驱动器 ChDrive "D"

CurDir: CurDir [(driver)]

返回当前工作路径,指定driver则返回目标驱动器的当前工作路径。

举例:

'新建文件,并写入数据,关闭

Open "a.txt" For Output As #1

Print #1, "ABCDEFG"; vbCrLf; "HIJK"

Close #1

'打开文件,并全部写入新文件,关闭

Open "a.txt" For Input As #2

Open "b.txt" For Output As #3

Dim str As String

While (Not EOF(2))

Line Input #2, str

Print #3, str

Wend

Close

注:关于Visual Basic 6.0的文件操作资料来自于

如果您觉得我的回答帮助了您解决难题,别忘了采纳哦,如果我的回答未能解决您的问题,您可以在互联网上寻找更多的解决方案!

vb.net问题

me.dispose是最彻底释放资源; Me.Close 是关闭 end 只是结束 一般用在程序的语句中,如结束语句。

执行 dispose 后,由.net 的GC垃圾回收器周期性地回收资源, me.close 方法的基类会调用 dispose 方法end 是从vb中继承下来的语句,直接指示退出程序.程序的资源将被释放,程序并未希望结束时,不适合使用该方法.若要强行退出应用程序,

vb.net面试题,请大家帮忙,谢谢。

如果需要讲详细一点,那就加我QQ531412815

第4题,潜在的错误,这里的错误不是常规错误,属于那种只有在运行是才知道的错误:

Catch ex As Exception

MsgBox(ex.StackTrace)

'永远不会查找下面的错误

Catch ex As ArgumentNullException

MsgBox("Input Test box cannot be null.")

Catch ex As OverflowException

MsgBox("Input Test box 2 cannot be zero!")

Catch ex As FormatException

MsgBox("Input Test box should be numeric format!")

结构化错误处理永远达不到下面这里,因为Catch ex As Exception 已经处理了所有错误.

第5题:

00123

1000 60.50

2000 60.00

3500 59.50

---- -----

6500 60.00

00124

3000 60.50

---- -----

3000 60.50

00125

2000 59.50

1000 58.00

---- -----

3000 58.75

就是按照Ref_ID 分类,有一种方法就是按照Ref_ID 分组,也就是使用SQL语言,不过这里需要该很多,

我就不用了,那么就稍微复杂一点,使用FIND方法,不过有一点必须注意REF_ID必须排序,因为数据库中

已经排好序了,我就不用排了。

Dim rst as ADODB.Recordset

dim refID as string

Rst = GetRecordset

Do While Not rst.EOF

refid=rst(0)

Console.writeline(rst.Fields("Ref_ID")

do

Console.writeline rst.Fields("Qty") vbcrlf rst.Fields("Price"))

rst.MoveNext()

loop while rst(0)=refid

Loop

第6题:就是从一个集合中取元素输出的问题

比较简单的办法就是使用递归

以下是使用VB的方法(可以移植到VB.NET上,因为我对VB.NET的数组到现在还不太会,所以就将就一下)

Dim bUse() As Boolean

Dim lStr() As String * 1

Dim nCount As Byte

-----------------------------------------------------------------------------------

Public Sub Combination(lstStr As String)

Dim i As Byte

Dim j As Byte

Dim StrLen As Byte

StrLen = Len(lstStr)

ReDim bUse(1 To StrLen) As Boolean

ReDim lStr(1 To StrLen) As String * 1

For i = 1 To StrLen

lStr(i) = Mid(lstStr, i, 1)

Next

For i = 1 To StrLen

nCount = i

GoWith StrLen, 1, 0, ""

Next

End Sub

------------------------------------------------------------------------------------

Public Sub GoWith(ECount As Byte, nStart As Byte, Deep As Byte, lastStr As String)

Dim i As Byte

If Deep = nCount Then

Debug.Print lastStr

Exit Sub

End If

For i = nStart To ECount

If Not bUse(i) Then

bUse(i) = True

GoWith ECount, i, Deep + 1, lastStr lStr(i)

bUse(i) = False

End If

Next

End Sub

--------------------------------------------------------------------------------------

Private Sub Form_Load()

Combination "wxyz"

End Sub

--------------------------------------------------------------------------------------

其中GOWITH是真正的递归函数,而Combination是用来预处理字符的

全局变量:

BUSE:用来确定是否使用过这个元素

lSTR:用来保存字符元素

NCOUNT:用来限制递归函数的深度,换句话说,就是输出元素组中的元素个数

实际测试成功,另外我对前三题很感兴趣,希望能够传给我

还有两道vb.net面试题,请大家帮忙,谢谢。

我很喜欢这种题目

-------------------------------------------------------------------------

第7题,问题出在两方面

Public Function CalculateArea(ByVal SideBase As Double, ByVal Height As Double, _ Optional

ByVal AssignToArea As Boolean = False) As Double

Dim Area As Double = (SideBase * Height) / 2

中间的 _ 有问题,应该去掉

还有objShape = CType(objShape, clsTriangle) 有错误,不能转换

注释掉objShape = CType(objShape, clsTriangle)

删除_后,得到结果

true

false

-330

--------------------------------------------------------------------------

第8题,就是以acc_grp_cust_tbl表为基础,查找cust_tbl并输出

一般的话使用涉及两个表的话使用SHAPE语句(以SQL为基础的语句)

虽然两者使用时差不多,但是理论比较难懂,我这里也不讲了,我使用ADO+SQL方法

先说明一下程序中的一个细节,也是问题比较容易忽略的

1400 0 1 2

1500 3 4

1600 5

说明一个问题Cust_id1 Cust_id2 Cust_id3 Cust_id4 字段不是数值,而是类似字符的东西(因为可能是

备注)

定义rsgrp对应acc_grp_cust_tbl ,rscust对应cust_tbl

预先设置好rsgrp和rscust的连接(使用VB的方法,可以移植到VB.NET上)

do until rscust.eof

strline=rscust(0) " "

strSQL="SELECT * FROM CUST_TBL WHERE cust_id='" RSGRP(1) "' OR CUST_ID='" RSGRP(2) "' OR CUST_ID='" RSGRP(3) "' OR CUST_ID='" RSGRP(4) "'"

RSGRP.OPEN STRSQL

if rsgrp.recordcount0 then

rsgrp.movefirst

do until rsgrp.eof

strLine=strline rscust(3) " " rscust(2) "/"

rsgrp.movenext

loop

end if

rscust.close

strline=left(strline ,len(strline)-1)

'去除最后一个"/"

console.writeline(strline)

loop

vb.net 简单小问题

还是用数组比较好吧,按钮数组

然后call Button_Click(5,Nothing, Nothing) 就可以了

按钮数组可以先创建一个按钮,然后复制粘贴即可

一个VB.net的菜鸟问题

【1】

New Char()意思是定义一个新的Char型数组并将此数组作为参数传递

基本等同于VB6的Dim tmp() As XXXX

但是此语法要比VB6中的更加灵活

【2】

VB.net中新增了一个Char类型,用来存储Unicode字符,而用引号""括起来的字符默认为ASCII字符,所以要在引号后加上一个小写的c来强制VB将字符转换为Unicode编码。例如:

Dim UniCode As Char,ASCIICode As String

UniCode = "W"c

ASCIICode = "W"

【3】花括号为初始一个新数组时的语法,括号中可以用逗号分隔开数组的初始值。对比:

VB6:

Dim k() As String

k = Array("a","b","c")

VB.net:

Dim k As String(){"a","b","c"}

而数组作为参数传递时,在过程的一开始就定义一个传递用的数组是很麻烦的,

所以用New Char(){ "a"c , "b"c , "c"c }会很方便

【4】

Split方法有很多重载版本,你所说的这一种能够使用


本文名称:vbnet面试题的简单介绍
文章源于:http://myzitong.com/article/doddesp.html