重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
因为数组是引用类型,所以直接赋值会出现这种情况
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名注册、雅安服务器托管、营销软件、网站建设、江岸网站维护、网站推广。
可以在kb=k后单独复制数组
kb.rr=k.rr.Clone
这样两个数组就是独立的了
之所以先kb=k是为了当其含有多个成员时值型成员可以直接复制,只需Clone引用类型的就行了
可以查看附件,或则使用以下代码。应该注释的满全了。
随便建一个窗口工程,窗口代码帖入以下代码。
Imports System.IO
Imports System.Text
Imports System.Reflection
Public Class Form1
Const ResName As String = "123.txt" ' 需要保存的资源名
Const BufferSize As Integer = 4096 ' 复制时缓冲的大小
Private Sub Demo()
' 变量声明
Dim strDisplayText As StringBuilder ' 保存输出信息
Dim strResName As String ' 保存目标资源的名称
' 变量初始化
strDisplayText = New StringBuilder()
strResName = String.Empty
' 获取所有资源
strDisplayText.AppendLine("文件中存在以下资源:")
For Each strName As String In Assembly.GetExecutingAssembly.GetManifestResourceNames()
strDisplayText.AppendLine(" " strName)
' 获得目标资源的全名
If strName.EndsWith("." ResName) Then
strResName = strName
End If
Next
' 目标资源不存在
strDisplayText.AppendLine()
If strResName = String.Empty Then
strDisplayText.AppendLine("抱歉,没有找名为""" ResName """的资源")
Else ' 复制资源的代码
' 打开资源文件,在End Using的时候自动关闭。
Using ms As UnmanagedMemoryStream = Assembly.GetExecutingAssembly.GetManifestResourceStream(strResName)
' 打开磁盘文件,在End Using的时候自动关闭。
Using fs As New FileStream("C:\" ResName, FileMode.Create)
' 变量声明
Dim Buffer(BufferSize - 1) As Byte ' 复制文件时的缓冲数组
Dim ReadCount As Integer ' 此次读取数据的数量
' 还有数据可以读取的情况,一直循环
ReadCount = ms.Read(Buffer, 0, BufferSize)
While ReadCount 0
fs.Write(Buffer, 0, ReadCount) ' 写入到磁盘文件
ReadCount = ms.Read(Buffer, 0, BufferSize)
End While
End Using
End Using
strDisplayText.AppendLine("文件已经复制完毕。")
End If
' 显示消息
MessageBox.Show(strDisplayText.ToString())
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Call Demo()
End
End Sub
End Class
VB.NET编程读取txt文本文档中的数据,并把数据保存为数组,代码如下:
'写配件文件
Private Sub saveIni(ByVal filePath As String, ByVal str As String)
Dim sw As StreamWriter = New StreamWriter(filePath, True) 'true是指以追加的方式打开指定文件
sw.WriteLine(str)
sw.Flush()
sw.Close()
sw = Nothing
End Sub
'读配件文件
Private Function readIni(ByVal filePath As String)
Dim iniDt As New DataTable
iniDt.Columns.Add("text")
iniDt.Columns.Add("value")
Try
Dim sr As StreamReader = New StreamReader(filePath, System.Text.Encoding.Default)
Dim line As String = ""
While Not sr.EndOfStream
Dim str = sr.ReadLine()'读取当前行
iniDt.Rows.Add(New String() {
str(0),
str(1)
})
End While
sr.Close()
sr = Nothing
Catch ex As Exception
End Try
Return iniDt
End Function
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim ListboxTotalItem As Integer = ListBox1.Items.Count - 1
Dim a(ListboxTotalItem) As String
For i As Integer = 0 To ListboxTotalItem
a(i) = i
Next
Label1.Text = a(5)
End Sub
End Class
-------------
一个Form1
一个Label1
一个Listbox1
一个Button1
在Listbox1中加入10个值
-------------
只是一个演示,其他的要靠自己。
解决方法:
1.字符串内容设置为定长,或者定义一个结束符(或字符串,如连续2个0xFF)附加在字符串尾部,程序以此方式先以文本方式读取字符串数据。
2.字符串内容也按照二进制方式发送。
3.在传输的字符串和二进制数据前附加N字节的标识字节,其中存储发送的字符串和二进制字符串长度。
方法很多。
CopyMemory()函数功能描述:将一块内存的数据从一个位置复制到另一个位置。
函数原型
VOID CopyMemory(PVOID Destination,CONST VOID *Source,SIZE_T Length);
参数
Destination要复制内存块的目的地址。
Source要复制内存块的源地址。
Length指定要复制内存块的大小,单位为字节
返回值该函数为VOID型,没有返回值。
备注如果目的块与源块有交叠,结果是不可预料的,使用MoveMemory可以解决这个问题。
注意一点CopyMemory和MoveMemory不过是RtlMoveMemory的一个别名而已
示例代码段
char szname[50]="阵雨";
char szfriend[]="polelf,oo";
CopyMemory(szname+4,szfriend,10);
OutputDebugString(szname);//输出结果为"阵雨polelf,oo"
vb6的声明:
Private Declare Sub CopyMemory Lib "kernel32" Alias"RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length AsLong)