Tag: 大文件

将非常大的文件从xml转换为csv

目前我正在使用以下代码片段将带有XML数据的.txt文件转换为.CSV格式。 我的问题是,目前这适用于大约100-200 mbs的文件,并且转换时间非常短(最多1-2分钟),但是我现在需要它来处理更大的文件(每个1-2 GB)文件)。 目前该程序冻结了计算机,使用此function转换大约需要30-40分钟。 不知道我将如何继续更改此function。 任何帮助将不胜感激! string all_lines = File.ReadAllText(p); all_lines = “” + all_lines + “”; XmlDocument doc_all = new XmlDocument(); doc_all.LoadXml(all_lines); StreamWriter write_all = new StreamWriter(FILENAME1); XmlNodeList rows_all = doc_all.GetElementsByTagName(“XML”); foreach (XmlNode rowtemp in rows_all) { List children_all = new List(); foreach (XmlNode childtemp in rowtemp.ChildNodes) { children_all.Add(Regex.Replace(childtemp.InnerText, “\\s+”, ” “)); } […]

在C#中处理大量文件

我有一个4Gb文件,我想执行基于字节的查找和替换。 我已经编写了一个简单的程序来完成它,但是只需要一个查找和替换就需要太长时间(90分钟+)。 我尝试过的一些hex编辑器可以在3分钟内完成任务,并且不会将整个目标文件加载到内存中。 有谁知道我可以完成同样的事情的方法? 这是我目前的代码: public int ReplaceBytes(string File, byte[] Find, byte[] Replace) { var Stream = new FileStream(File, FileMode.Open, FileAccess.ReadWrite); int FindPoint = 0; int Results = 0; for (long i = 0; i Find.Length – 1) { Results++; FindPoint = 0; Stream.Seek(-Find.Length, SeekOrigin.Current); Stream.Write(Replace, 0, Replace.Length); } } else { FindPoint = 0; […]

C#保存巨大的图像

我在尝试使用C#保存大量图像时遇到了困难(我说的是超过一千兆字节)。 基本上我试图在部分中执行此操作 – 我有大约200个位图源,我需要一种方法在将它们编码为.png文件之前或之后将它们组合。 我知道这将需要大量的RAM,除非我以某种方式直接从硬盘驱动器传输数据但我不知道如何做到这一点。 每个位图源都是895×895像素,因此在编码后组合图像似乎并不容易,因为C#不允许您创建大小为13425 x 13425的位图。

在整个文件中进行多行正则表达式搜索

我已经找到大量示例来使用正则表达式替换文件中的文本。 然而,这一切归结为两个版本: 1.迭代文件中的所有行并将regex应用于每一行 2.加载整个文件。 第2号使用“我的”文件是不可行的 – 它们大概是2GiB …… 至于第1名:目前这是我的方法,但我想知道……如果需要应用跨越多行的正则表达式怎么办?

在C#中计算大文件的MD5SUM

我使用以下代码来计算文件的MD5SUM – byte[] b = System.IO.File.ReadAllBytes(file); string sum = BitConverter.ToString(new MD5CryptoServiceProvider().ComputeHash(b)); 这通常工作正常,但如果我遇到一个大文件(~1GB) – 例如ISO映像或DVD VOB文件 – 我得到一个Out of Memoryexception。 虽然,我能够在cygwin中为大约10秒的同一文件计算MD5SUM。 请建议如何让我的程序中的大文件工作。 谢谢

如何在.NET中下载大文件(通过HTTP)?

我需要在C#控制台应用程序中通过HTTP下载大文件(2 GB)。 问题是,在大约1.2 GB之后,应用程序内存不足。 这是我正在使用的代码: WebClient request = new WebClient(); request.Credentials = new NetworkCredential(username, password); byte[] fileData = request.DownloadData(baseURL + fName); 如你所见…我正在将文件直接读入内存。 我很确定如果我要从块中读取数据并将其写入磁盘上的文件,我可以解决这个问题。 我怎么能这样做?

如何从文本文件中读取数百万行并快速插入表中

我已经通过插入200万行快速链接到SQL Server ,发现我可以通过使用批量插入来完成此操作。 所以我试图创建数据表(代码如下),但因为这是一个巨大的文件(超过300K行)我在我的代码中得到一个OutOfMemoryEexception : string line; DataTable data = new DataTable(); string[] columns = null; bool isInserted = false; using (TextReader tr = new StreamReader(_fileName, Encoding.Default)) { if (columns == null) { line = tr.ReadLine(); columns = line.Split(‘,’); } for (int iColCount = 0; iColCount < columns.Count(); iColCount++) { data.Columns.Add("Column" + iColCount, typeof(string)); } […]

尝试上传大文件时获取exception

我正在使用wshttpbinding来提供服务 当我尝试上传15Mb的文件时,它会抛出下面的EndPointNotFoundException: 例外消息: There was no endpoint listening at “MY SERVICE URL” that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details. 例外: The remote server returned an error: (404) Not Found.

绘制大量数据

我们目前正在使用ZedGraph绘制一些数据的折线图。 输入数据来自任意大小的文件,因此,我们事先不知道最大数据点数是多少。 但是,通过打开文件并读取标题,我们可以找出文件中有多少数据点。 文件格式基本上是[时间(双精度),值(双精度)]。 但是,条目在时间轴上不一致。 在t = 0秒和t = 10秒之间可能没有任何点,但在t = 10秒和t = 11秒之间可能存在100K,依此类推。 例如,我们的测试数据集文件大约为2.6 GB,它有324M点。 我们想向用户展示整个图表,让她浏览图表。 然而,向ZedGraph加载324M点不仅是不可能的(我们使用的是32位机器),但也没用,因为屏幕上没有这么多点。 使用ZedGraph的FilteredPointListfunction似乎也是不可能的,因为这需要先加载整个数据,然后对该数据执行过滤。 因此,除非我们遗漏任何东西,否则我们唯一的解决方案似乎是 – 以某种方式对数据进行抽取,但是当我们不断努力时,我们遇到了很多问题: 1-我们如何抽取未及时到达的数据? 2-由于无法将整个数据加载到内存中,因此任何算法都需要在磁盘上运行,因此需要仔细设计。 3-我们如何处理放大和缩小,尤其是当数据在x轴上不均匀时。 如果数据是统一的,在初始加载图形时,我们可以通过文件中预定义的条目数量来Seek() ,并选择每N个其他样本并将其提供给ZedGraph。 但是,由于数据不统一,我们必须在选择要显示的样本时更加智能,并且我们无法提出任何不必读取整个文件的智能算法。 我道歉,因为这个问题没有严格的特异性,但我希望我可以解释我们问题的性质和范围。 我们在Windows 32位,.NET 4.0上。

如何最好地在.NET中使用XPath和非常大的XML文件?

我需要在C#中对相当大的XML文件(这里可能超过一千兆字节)进行一些处理,包括执行一些复杂的xpath查询。 我遇到的问题是我通常通过System.XML库执行此操作的标准方法是在将任何内容添加到内存之前将整个文件加载到内存中,这会导致此大小的文件出现内存问题。 我只需要阅读它们并查询其中包含的数据就不需要更新文件。 一些XPath查询非常复杂,并且涉及多个级别的父子类型关系 – 我不确定这是否会影响使用流式读取器的能力,而不是将数据作为块加载到内存中。 我可以看到使其工作的一种方法是使用基于流的方法执行简单分析,并且可能将XPath语句包装到XSLT转换中,之后我可以在文件中运行,尽管看起来有点复杂。 或者我知道XPath查询有一些元素不能运行,所以我想我可以根据它的原始树结构将文档分解为一系列较小的片段,这可能足够小,可以在内存中处理造成太大的破坏。 我试图在这里解释我的目标,所以如果我在一般方法上咆哮完全错误的树,我相信大家可以让我正确…