中易网

vb open函数

答案:3  悬赏:30  
解决时间 2021-02-21 02:08
vb open函数
最佳答案
VB中的open函数:
Open:顾名思义,它的作用是打开文件,换而言之打开某个文件就是获得某个的控制权,一般情况下当文件处于打开状态时只有打开者才能对它进行操作。打开文件时要指定一个整数作为文件号,以后的操作都是针对这个代号进行的,而不是针对文件名。文件号也叫句柄,在程序中一个文件号只能指向一个文件,不能出现两个文件同时具有相同句柄的情况。
Close:关闭文件,即释放文件的控制权。
Line Input:以行为单位取得文件内容,以行为单位是指从当前位置开始到下一个换行符为止的内容。换行符是Chr(13) & Chr(10)两个字节组成,VB中已定义了常量vbCrLf,可直接使用。要注意的是Line Input读取一行时会把行尾的换行符去掉,因此我们在读取每行内容时要记得补上换行符才能保持得到的内容与文件一致。
Freefile:得到空闲的文件号,用这个函数取得文件号可以避免文件号的冲突。
例如:
Dim strFileName As String '文件名
Dim lngHandle As Long '文件句柄
Dim strAll As String '所读取的文本文件的所有内容
Dim strLine As String '在循环中存放每行的内容

strFileName = "c:\b.txt"

'获得文件的句柄
lngHandle = FreeFile()

'For后面的参数表示以何种方式打开文件,Input是读取,Output是覆盖写入,Append是追加写入
Open strFileName For Input As lngHandle

'循环直到文件尾
Do While Not EOF(lngHandle)
'每次读取一行存放在strLine变量中
Line Input #lngHandle, strLine
'每次读取都把所读到的内容连接到strAll变量,由于Line Input去掉了换行符,所以这里补上
strAll = strAll & strLine & vbCrLf
Loop

'显示得到的全部分内容
MsgBox strAll, vbInformation
对文本文件的写入相对简单些,有三个步骤:打开文件,写入文本,关闭文件。
代码示例:
Dim strFileName As String '文件名
Dim lngHandle As Long '句柄
Dim strWrite As String '要写入的文本内容

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

'准备要写入的内容
strWrite = "落日楼头,断鸿声里,江南游子。把吴钩看了,栏干拍遍,无人会、登临意。"

Open strFileName For Output As lngHandle'打开文件
Print #lngHandle, strWrite'写入文本
Close lngHandle'关闭文件

MsgBox "写入完成。", vbInformation
· 二进制文件的操作
所有文件的存储其实质都是二进制的,二进制文件往往由两部分组成,一部分是文件头另一部分存放了文件的内容。文件头通常存放与文件格式有关的信息,以BMP等图象文件为例,它们的文件头中存放了是何种图形格式、图象大小、调色板等信息,要显示图象时先读取文件头以获得文件的详细信息,然后再按其格式把图象内容显示出来。用二进制方式可以操作任何的文件,当然至关重要的一点是要清楚了解所操作文件的文件头结构。

VB中二进制文件操作主要应用的方法和函数有:Open,Close,Get,Put等。
Open:在For后面的打开模式要用Binary。
Close:关闭文件。
Get:在指定位置取得文件的内容,如果省略位置则从当前位置读取。
Put:在指定位置写入文件,如果省略位置参数就从当前位置写。
下面结合代码讲解二进制文件的操作。
下述程序完成了将两个文件结合成一个文件以及将这个结合后的文件再拆分成原来的两个文件。文件头的结构是自己定义的,非常简单,共8个字节(也就是两个长整型的长度),前4个字节存放第一个文件的长度,后4个字节存放第二个文件的长度。为了更直观地表达文件的结构,现假设有两个文件,第一个文件长度是100字节,第二个文件是200字节,那么合并后得到的文件应该是308字节。按顺序来看,文件的结构是:
4第一文件的长度
4第二文件的长度
100第一文件的二进制内容
200第二文件的二进制内容
除了文件头的8字节长度是固定的后面的长度都会因文件的不同而变化的。
‘实现文件的合并
Private Sub MergeFile()
Dim strFileName1 As String '第一个文件
Dim strFileName2 As String '第二个文件
Dim strOutput As String '合并后的文件
Dim aryContent() As Byte '用来读取文件的数组,每次读取前要重定义

strFileName1 = "c:\a.bmp"
strFileName2 = "c:\b.bmp"
strOutput = "c:\out.bmp"

'注意下面三个Open语句都是用Binary模式打开的
Open strOutput For Binary As #100

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

Put #100, , LOF(1) '取得第一文件的长度,并把它写入到合并文件的文件头中
Put #100, , LOF(2) '取得第二文件的长度,并写入到合并文件的文件头中

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

Put #100, , aryContent() '把第一文件的内容写到合并文件中
ReDim aryContent(LOF(2) - 1)
Get #2, , aryContent()

Put #100, , aryContent()

'关闭文件
Close #1
Close #2
Close #100
End Sub
‘实现文件的拆分
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) '取得第一文件的长度
Get #100, , lngLOF(1) '第二文件的长度

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

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

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

Close #1
Close #2
Close #100

MsgBox "拆分完成。", vbInformation
文本文件由于没有格式所以它的读写都比较简单和直观,而用二进制操作文件时其实质就是对文件头的理解,如果不知道文件头的结构那就无法对文件进行处理了,知道了文件头所包含的信息后,对文件的操作其实就是按规则进行Get、Put罢了。
全部回答
open(/dev/ietctl, O_RDWR)
  这是文件I/O的常用函数,open函数,open函数用来打开一个设备,他返回的是一个整型变量,如果这个值等于-1,说明打开文件出现错误,如果为大于0的值,那么这个值代表的就是文件描述符。
  一般的写法是:
    if((fd=open("/dev/ttys0",O_RDWR | O_NOCTTY | O_NDELAY)<0)
  {perror("open");}
  这个是常用的一种用法fd是设备描述符,linux在操作硬件设备时,屏蔽了硬件的基本细节,只把硬件当做文件来进行操作,而所有的操作都是以open函数来开始,它用来获取fd,然后后期的其他操作全部控制fd来完成对硬件设备的实际操作。你要打开的/dev/ttyS0,代表的是串口1,也就是常说的com1,后面跟的是一些控制字。intopen(constchar*pathname,intoflag,„/*,mode_tmode * / )这个就是open函数的公式。
  控制字可以有多种:
  O_RDONLY 只读打开。
O_WRONLY 只写打开。
O_RDWR 读、写打开。
O_APPEND 每次写时都加到文件的尾端。
O_CREAT 若此文件不存在则创建它。使用此选择项时,需同时说明第三个参数mode,用其说明该新文件的存取许可权位。
O_EXCL 如果同时指定了O_CREAT,而文件已经存在,则出错。这可测试一个文件是否存在,如果不存在则创建此文件成为一个原子操作。
O_TRUNC 如果此文件存在,而且为只读或只写成功打开,则将其长度截短为0。
O_NOCTTY 如果p a t h n a m e指的是终端设备,则不将此设备分配作为此进程的控制终端。
O_NONBLOCK 如果p a t h n a m e指的是一个F I F O、一个块特殊文件或一个字符特殊文件,则此选择项为此文件的本次打开操作和后续的I / O操作设置非阻塞方式。
O_SYNC 使每次w r i t e都等到物理I / O操作完成。
这些控制字都是通过“或”符号分开(|)
vb.net好像对open命令进行封装了吧?你换作其他的文件打开方式吧,比如:
Microsoft.VisualBasic.FileIO.FileSystem.OpenTextFileReader()
Microsoft.VisualBasic.FileIO.FileSystem.OpenTextFileWriter()
或者也有其他的方式:
Dim path As String = "c:\aa.txt "
'读取文件
Dim bytes() As Byte = System.IO.File.ReadAllBytes(path)
'定义数组
Dim str(bytes.Length - 1) As String
'填充数组
For i As Integer = 0 To bytes.Length - 1
str(i) = bytes(i).ToString
Next
你在网上搜一下,好多.net对文件操作的方式呢
-------------------------------------------
看看工程引用里有关 runtime 的项是否有问题,重新添加一下
就是点“工程”菜单下“引用”菜单项,看看有没有选择“visual basic runtime objects……”这一项,或者是不是存在异常?有异常的话就重新选择一遍,最好在出错的时候进行上述操作
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
无限极牙膏可以去疤吗?
赣州银行笔试都考些什么啊?
瑶海区瑞泰社区蔬菜直销店地址有知道的么?有
鸿生驾校(白城大安市)地址有知道的么?有点事
做服装店,是款多货少还是货多款少好
嘉实多金嘉护5w30转速达到6000能承受吗
在家训练,如何正确购买健身器材?
你好,3D,学谜。单折有弯环双连。这句谜语,
怎么给女生庆祝生日
图中蚌埠到济南的距离为什么是480而不是966?
梦到鸽子被人用开水烫死了什么意思
日照外国语学院是初中还是高中?
空压机转反方向该怎么办
如意正宗道口烧鸡店在什么地方啊,我要过去处
武器大师贾克斯那个有敲击感的皮肤叫什么?
推荐资讯
三菱速跑油箱能装多少升油
教师资格证分不分国家级 省级 市级啊? 怎么
讯6所谓的谷歌客服黑吃白事件,到底是什么
初学日语…… 你是谁?(あなたはだれですか
淄博市张店区的城区大还是北京市昌平的城区大
专色如何向印刷四色转换?
英雄联盟雪人骑士
世界上最小的山脉叫什么
我的长安之星的面包车有一次下大雨的时候
电脑的速度和硬盘的大小有没有关系?
ip2780打印机打出斜字是否需要更换墨盒
新春饭店我想知道这个在什么地方
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?