AHOI智能评测系统开发(四)

昨天临时文件建立的问题已经解决。发现自己之前对临时文件的理解不够,实际中没有用到临时文件。但关于临时文件操作的方法已经掌握啦~

临时文件de操作:
Private Declare Function GetTempFileName Lib "kernel32" Alias "GetTempFileNameA" (ByVal lpszPath As String, ByVal lpPrefixString As String, ByVal wUnique As Long, ByVal lpTempFileName As String) As Long

Public Sub MakeTempFiles(ByVal PathName As String, ByRef TempFileName As String)
    Dim X As Long
    Dim Prefix As String
    Dim Unique As Integer
    'Dim PathName As String
    Dim NewFileName As String
    ' 将下列两个变量初始化为144个空格的字符串。
    TempFileName = Space(144)
    NewFileName = Space(144)
       
    ' 从文首给出的函数GetTempDir获得系统的临时文件夹路径。
    'PathName = strExamineeProgramsPath + strSingleTestDirectoy
    ' 创建的临时文件的前缀。
    Prefix = "DATA"
    ' 使用当前系统时间来创建一个数字附加在文件后。
    Unique = 0
       
    ' 取得TempFileName变量的所代表的文件夹和路径。
    X = GetTempFileName(PathName, Prefix, Unique, TempFileName)
    ' 删除TempFileName后面的空格。
    TempFileName = Trim(TempFileName)
    ' TempFileName后面仍然有一个空字符需要删除。
    TempFileName = Left(TempFileName, Len(TempFileName) - 1)
End Sub


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'GetTempFileName函数:
'GETTEMPFILENAME函数能够软盘或硬盘上创建临时文件。此函数创建的临时文件在 VISUAL BASIC应用程序终止时,不会自动删除,因此,必须用 Visual Basic 的Kill语句来删除该文件。
'GetTempFileName  函数有四个变量,其意义与功能如下:

'lpszPath: 该字符串指定函数创建的临时文件名所在的路径
'lpPrefixString: 该字符串将用作临时文件名的前缀
'wUnique:指定一个创建临时文件名所用的无符号整数。如果这个参数为非零,则加到临时文件名上。如果这个参数为零,则Windows利用当前系统时间来创建一个数字附加于文件后
'lpTempFileName: 该字符串指向接收创建的临时文件的名称?它应该初始化为至少有144个字符长度

'GetTempFileName 函数将在第一个硬盘或由TEMP环境变量指定的磁盘上创建临时文件。调用GetTempFileName函数后,就在指定磁盘上创建临时文件。lpTempfileName缓冲区含有文件的完整路径,而以wUnique参数指定数字结尾。

'GetTempFileName函数创建的临时文件如下列形式:
'Path/PreEuuuu.tmp
'其中:
'Path: 由lpszPath参数指定的路径
'Pre: lpPrefixString字符串的头三个字母
'Euuuu: wUnique参数的十六进制值

'一旦应用程序创建临时文件成功,就可以使用下面两个语句来分出真正的文件名:
'TempFileName = Left(TempFileName, InStr(TempFileName, Chr(0)) - 1)
'TempFileName = Trim(Right(TempFileName, Len(TempFileName) - 3))
'第一个语句使用 InStr 函数删除用来接收文件名的缓冲区返回的最后一个空字符。此字节大小的值由wUnique变量使用。第二个语句是用来删除文件名中的驱动器符(如C:/)。
'需要强调的是,由GetTempFileName 函数创建的临时文件在删除之前一直保存在磁盘中。

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'获取系统临时文件夹的函数:
'Private Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
'Private Const MAX_PATH = 260

' GetTempDir函数用来获取Windows的临时文件夹路径。
'   返回值:临时文件夹路径。
'Public Function GetTempDir() As String
'    Dim TempDir As String
'    Dim ChrLen As Long
'    ' 初始化字符串的大小。
'    TempDir = Space(MAX_PATH)
'    ' 使用下列API函数把获得的临时文件夹路径保存在TempDir变量中。
'    ChrLen = GetTempPath(MAX_PATH, TempDir)
'    If ChrLen > MAX_PATH Then
'        ChrLen = GetTempPath(TempDir, ChrLen)
'    End If
'    ' 只取TempDir左边ChrLen长度的字符串,
'    ' 以删除右边的空字符。
'    GetTempDir = Left(TempDir, ChrLen)
'End Function

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''



-实际解决思路
-首先每位选手的test.exe(这里举个例子,名为test)程序都是读取与其相同目录下的test.in文件。而我每题每人、选手的测试数据有10组:test.in0~test.in9。这样我的思路就是每次在该选手的参赛号目录下临时建立一个名为test.in的数据文件,其内容是测试时的test.in0~test.in9。每轮测试完,再用kill函数物理删除。

顺便弄清楚了按值传递参数按引用传递参数的区别。呵呵,其实在C/C++中早就清楚了,VB中不知怎么表达。
在过程或函数的参数列表中,如果缺省(ByRef),则是按地址传递,如果按值传递,则在调用函数中不会影响原值,否则,调用函数中,若修改了该参数的值,则原值也会被修改。
也就是说~按值传递:ByVal;按引用传递:ByRef(或缺省)。

另外,安装VB时自带的API浏览器非常好用,顶一下,呵呵~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值