Tag: 文件

当另一个线程/进程使用独占锁时,是否可以绕过C#中的文件锁?

有没有办法绕过或删除另一个线程持有的文件锁而不杀死线程? 我在我的应用程序中使用第三方库,该库对文件执行只读操作。 我需要第二个线程同时读取该文件以提取第三方库未公开的一些额外数据。 不幸的是,第三方库使用读/写锁打开文件,因此我得到通常的“进程无法访问文件…因为它正被另一个进程使用”exception。 我想避免使用我的线程预加载整个文件,因为文件很大并且会导致加载此文件和超出内存使用量的不必要的延迟。 由于文件的大小,复制文件是不实际的。 在正常操作期间,两个线程命中同一文件不会导致任何重大的IO争用/性能问题。 我不需要在两个线程之间进行完美的时间同步,但是它们需要在相隔半秒的时间内读取相同的数据。 我无法更改第三方库。 有没有解决这个问题的方法?

C#获取大型目录的文件名和上次写入时间

使用C#(。NET 2.0),在网络目录中检索文件列表的最佳方法是什么,优先选择按上次写入时间排序,还是根据上次写入时间排除返回值? 我目前正在使用DirectoryInfo实例的GetFiles方法返回一个列表。 我遇到的目录可以包含超过6,000个文件,只需要获取一个FileInfo数组就需要大约25秒。 WMI不起作用,我看不到任何其他以.NET为中心的东西,这将有助于这种情况。 我错过了什么吗? 有没有比使用GetFiles更好的解决方案? 谢谢。

如何使用内存映射文件C#读写文件?

我在D Drive中有一个像“D:\ Image \ 1.tiff”的图像。 我想读取此文件并将其写入另一个位置,例如在路径“D:\ Project \”中。 如何使用内存映射文件执行此操作?

将文件存储在C#EXE文件中

对我来说,在EXE中存储一些文件以复制到选定位置实际上很有用。 我正在生成HTML和JS文件,需要复制一些CSS,JS和GIF。 片段 System.IO.File.WriteAllBytes(@“C:\ MyFile.bin”,ProjectNamespace.Properties.Resources.MyFile); 不适合我! 在“WriteAllBytes”上,它说:“无法从’System.Drawing.Bitmap’转换为’byte []’”用于图像,“无法从’string’转换为’byte []’”用于文本文件。 救命! 更新:解决方案如下。

C#BinaryWrite over SSL

我正在尝试使用存储在MSSQL varbinary(MAX)字段中的PDF回复客户端。 响应通过http连接在我的localhost和测试服务器上运行,但不能通过https连接在生产服务器上运行。 我只使用一个简单的BinaryWrite(下面的代码)。 byte[] displayFile = DatabaseFiles.getPdfById(id); Response.ContentType = “application/pdf”; Response.BinaryWrite(displayFile); 这里没什么好看的。 只需获取二进制数据,设置内容类型,然后写回客户端。 有没有什么特别需要做的,以这种方式回复https? 编辑:通过不起作用,我的意思是我在浏览器中得到一个空白文档。 Acrobat无法在浏览器中加载。 编辑:我只是注意到这个问题只发生在IE 7中.PDF 3中的PDF正确加载。我们的客户端专门使用IE 7(优于IE 6,我说服他们升级…大声笑)。 编辑:尝试添加标题“content-disposition”以使文件充当附件。 浏览器无法在SSL下加载IE错误“Internet Explorer无法从ProductionServer.net下载displayFile.aspx”。 (以下代码) byte[] displayFile = DatabaseFiles.getPdfById(id); Response.Clear(); Response.AddHeader(“content-disposition”, String.Format(“attachment;filename={0}”, fileName)); Response.ContentType = “application/pdf”; Response.BinaryWrite(displayFile); 编辑:如果在生产服务器上通过http查看文件,浏览器将显示PDF的代码,就像通过NotePad查看一样。 (例如%PDF-1.4%â€6 0 obj endobj xref 6 33 …等)

如何使用C#.NET创建.odt文件?

注意:我发现这是“在C#.NET中创建Word文档” ,但这不是我想要的。 你知道如何创建一个.odt来从C#.NET创建文件吗? 是否有OpenOffice.org库的.NET组件或包装器来执行此操作?

将文本文件加载到列表框中

我想要实现的是将文本文件加载到列表框中。 这看起来很简单但我需要在文本文件中识别出有新行时,每个新行都需要是列表框中的新项。 如果可以的话,将非常感谢答复。

逐行读取大文本文件并搜索字符串

我目前正在开发一个应用程序,它读取大约50000行的文本文件。 对于每一行,我需要检查它是否包含特定的字符串。 目前,我使用传统的System.IO.StreamReader逐行读取我的文件。 问题是文本文件的大小每次都会改变。 我做了几个测试性能,我注意到当文件大小增加时,读取一行所需的时间就越多。 例如 : 读取包含5000行的txt文件:0:40 读取包含10000行的txt文件:2:54 读取2倍大的文件需要4倍的时间。 我无法想象读取100000行文件需要多长时间。 这是我的代码: using (StreamReader streamReader = new StreamReader(this.MyPath)) { while (streamReader.Peek() > 0) { string line = streamReader.ReadLine(); if (line.Contains(Resources.Constants.SpecificString) { // Do some action with the string. } } } 有没有办法避免这种情况:更大的文件=更多时间阅读一行?

使用c#将FileStream编码为base64

我知道如何编码/解码一个简单的字符串到/从base64 。 但是,如果数据已经写入FileStream对象,我该怎么做呢? 假设我只能访问FileStream对象,而不能访问之前存储的原始数据。 在将FileStream刷新到文件之前,如何将FileStream编码为base64 。 在我将FileStream写入文件之后,我可以打开我的文件并对其进行编码/解码,但我想一步一步完成所有这一切,而不是一个接一个地执行两个文件操作。 该文件可能更大,并且在刚刚保存一小段时间后再加载,编码并再次保存它也需要两倍的时间。 也许有人认识一个更好的解决方案? 我可以将FileStream转换为字符串,对字符串进行编码,然后将字符串转换回FileStream,例如,我将做什么以及这样的代码将如何?

使用C#通过下钻来扫描硬盘?

我正在尝试创建一个扫描驱动器的应用程序。 但棘手的是,我的驱动器包含一组文件夹,这些文件夹在文件夹中包含文件夹并包含文档。 我正在尝试扫描驱动器,获取所有文档和文件夹的“快照”并转储到.txt文件中。 我第一次运行这个应用程序时,输出将是一个包含所有文件夹和文件的文本文件。 我第二次运行这个应用程序,它将需要2个文本文件(从第二次运行应用程序生成的文件和第一次运行应用程序时的.txt文件)并比较它们…报告内容已被移动/覆盖/删除。 有没有人有这方面的代码? 我是这个C#的新手,任何帮助都会非常感激。 提前致谢。