gpt4 book ai didi

VB.NET 合并大文件

转载 作者:行者123 更新时间:2023-12-04 05:13:40 26 4
gpt4 key购买 nike

我希望使用 VB.NET 来替换合并大文件的批处理文件。这是因为批处理文件在作为计划作业运行时会挂起。 (批处理文件在其他任何地方都可以正常工作;但不能作为 SQL 作业。)

批处理文件执行了以下步骤:
复制 "\server\network location\large_file1.txt"+ "\server\network location\large_file2.txt"+ "\server\network location\large_file3.txt"

这些文件非常大,我不想打开其中任何一个。我认为运行该作业的服务器可能内存不足。

这可以在 VB.NET 中完成吗?

谢谢!

更新:来自用户评论的解决方案:

Dim myBuffer(4096) As Byte 
Dim fsdest As System.IO.FileStream
Dim fsSecondFile As System.IO.FileStream fsdest = New System.IO.FileStream(strDestinationfile, System.IO.FileMode.Append)

fsSecondFile = New System.IO.FileStream(strSecondFile, IO.FileMode.Open, IO.FileAccess.Read)

Do While fsSecondFile.Read(myBuffer, 0, myBuffer.Length) > 0
fsdest.Write(myBuffer, 0, 4095)
Loop

fsdesc.close()
fsSecondFile.close()

最佳答案

不,您不能在不打开任何文件的情况下合并文件。您需要在某个级别“打开它们”以访问数据,无论是使用 System.IO 提供的框架功能,还是使用 native API 读取光盘扇区,您仍然需要“打开”/读取数据。

解决方案是打开文件,是的,但是 using streamsbuffers这样您就可以进行一些内存管理,而不仅仅是通过“全部读取”调用使系统膨胀。

所以,..

  • 定义一个缓冲区 ( new Byte(4096) )
  • 打开一个新的空文件 ( Using ... new System.IO.File.Open(...) )
  • 对于要加入的每个文件...
  • 打开该文件 ( Using ... new System.IO.File.Open(...) )
  • 使用 Read 循环FileStream的方法顺序填充缓冲区直到它返回 <= 0
  • 使用 Filestream 将缓冲区内容写入新文件的 Write .
  • 关于VB.NET 合并大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14566728/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com