Tag: file io

并行文件是否比顺序读取更快?

我只是想知道是并行File.Read使用PLINQ / Parallel可以更快吗? 我的代码如下(.Net 4.0): public static void ReadFileParallel(List fileName) { Parallel.Foreach(fileName, file=>File.Read(file)); } public static void ReadFilePLINQ(List fileName) { fileName.AsParallel().foreach(file=>File.Read(file)); } 我问这个的原因是因为我认为文件读取是IO绑定的,所以做并行不会有帮助,我是对的吗?

将FileInfo数组转换为String数组C#

我像这样创建一个FileInfo数组 try { DirectoryInfo Dir = new DirectoryInfo(DirPath); FileInfo[] FileList = Dir.GetFiles(“*.*”, SearchOption.AllDirectories); foreach (FileInfo FI in FileList) { Console.WriteLine(FI.FullName); } } catch (Exception e) { Console.WriteLine(e.ToString()); } 此数组包含folder = DirPath中的所有文件名 我想到循环遍历FileInfo数组并将其复制到String数组。 这样可以,还是有更清洁的方法?

* FASTEST *目录列表

我有大量的目录,我想尽快读取所有文件。 我的意思是,快速没有DirectoryInfo.GetFiles,而是“从磁盘低级别获取集群”。 当然,.NET 2.0,c# 类似的问题在这里,但这种方法没有任何好处: C#目录列出海量目录 有人建议在FindFirst / FindNext上使用pInvoke。 有人试过这个并且能够分享结果吗?

该进程无法访问该文件,因为它正由另一个进程使用(文件已创建但不包含任何内容)

using System.IO; class test { public static void Main() { string path=@”c:\mytext.txt”; if(File.Exists(path)) { File.Delete(path); } FileStream fs=new FileStream(path,FileMode.OpenOrCreate); StreamWriter str=new StreamWriter(fs); str.BaseStream.Seek(0,SeekOrigin.End); str.Write(“mytext.txt…………………….”); str.WriteLine(DateTime.Now.ToLongTimeString()+” “+DateTime.Now.ToLongDateString()); string addtext=”this line is added”+Environment.NewLine; File.AppendAllText(path,addtext); //Exception occurrs ?????????? string readtext=File.ReadAllText(path); Console.WriteLine(readtext); str.Flush(); str.Close(); Console.ReadKey(); //System.IO.IOException: The process cannot access the file ‘c:\mytext.txt’ because it is //being used by […]

Encoding.Default如何在.NET中运行?

我正在使用以下方法读取文件: var source = File.ReadAllText(path); 并且字符©未正确加载。 然后,我将其更改为: var source = File.ReadAllText(path, Encoding.UTF8); 没别的了。 我决定尝试使用 var source = File.ReadAllText(path, Encoding.Default); 它工作得很好。 然后我调试它,并试图找到哪个编码做了伎俩,我发现它是UTF-7 。 我想知道的是: 是否建议使用Encoding.Default ,是否可以保证文件的所有字符都可以正常读取?

如何将字节数组转换回文件并使用C#自动打开?

我正在编写一些代码来将文件附件添加到我正在构建的应用程序中。 我有添加和删除工作,但我不知道从哪里开始实现打开。 我有一个字节数组(来自表字段),我不知道如何让它自动打开,例如 如果我有一个PDF格式的字节数组,如何让我的应用程序自动打开Acrobat或当前分配的扩展程序使用C#的任何应用程序?

C#中的日志文件锁定问题

我有一个Windows服务,它将日志文件条目写入XML日志文件。 我在服务运行时维护日志文件的句柄,并在服务停止时关闭,刷新并处理它。 文件写入操作仅由服务进行,我在FileAccess.ReadWrite中打开文件流,而共享设置为FileShare.Read。 我希望能够通过另一个应用程序的XmlRead()调用打开并查看此文件,但是我收到一条错误,指出该文件正由另一个进程使用。 我已经阅读了另一篇关于此的post,并认为这是可能的: 其他主题 。 正在使用的编写器被刷新,关闭和处理,并且每次写入文件流都被刷新。 这在.Net中是不可能的,还是我可能做错了什么? 该代码的缩减版本如下: if (_logFS == null) _logFS = new FileStream(_fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read); if (!initFile) { _logFS.Seek(-13, SeekOrigin.End); } XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; settings.OmitXmlDeclaration = true; using (XmlWriter writer = XmlWriter.Create(_logFS, settings)) { if (initFile) { writer.WriteRaw(“\n”); writer.WriteStartElement(“Entries”, “http://www.abcdefg.com); } writer.WriteStartElement(“Exception”); // write […]

返回FileStream后无法删除临时文件

我在C#MVC应用程序中有一个函数,它创建一个临时目录和一个临时文件,然后使用FileStream打开文件,将FileStream返回给调用函数,然后需要删除临时文件。 但是,我不知道如何删除临时目录和文件,因为它总是错误地说“进程无法访问该文件,因为它正被另一个进程使用”。 这是我尝试过的,但FileStream仍然使用finally块中的临时文件。 如何返回FileStream并删除临时文件? public FileStream DownloadProjectsZipFileStream() { Directory.CreateDirectory(_tempDirectory); // temporary file is created here _zipFile.Save(_tempDirectory + _tempFileName); try { FileStream stream = new FileStream(_tempDirectory + _tempFileName, FileMode.Open); return stream; } finally { File.Delete(_tempDirectory + _tempFileName); Directory.Delete(_tempDirectory); } } FileStream返回的函数如下所示: public ActionResult DownloadProjects () { ProjectDownloader projectDownloader = new ProjectDownloader(); FileStream stream = projectDownloader.DownloadProjectsZipFileStream(); return […]

使用C#/ .NET替换文件中文本的最佳方法是什么?

我有一个文本文件,作为一个非常大的数据提取的一部分写入。 文本文件的第一行是提取的“帐户”数。 由于此提取的性质,该数字直到过程的最后才知道,但文件可能很大(几百兆)。 在C#/ .NET中打开文件(在本例中是一个简单的文本文件),并替换文本的第一个“行”中的数据的最佳方法是什么? 重要说明 : – 我不需要替换“固定数量的字节” – 这很容易。 这里的问题是需要插入文件顶部的数据是可变的。 重要说明2 : – 有些人询问/提到只是将数据保存在内存中然后更换它……但这完全是不可能的。 更新此过程的原因是因为有时它会在将几个演出加载到内存时崩溃。

该文件已存在时无法创建文件

我正在使用Winforms,我正在尝试将文件从一个位置复制到另一个位置。 如果已存在具有相同名称的文件,我想覆盖它。 但我得到一个错误,如“当该文件已存在时无法创建文件”。 我想覆盖该文件。 我该怎么办? 我尝试了File.copy而不是File.move ,但我得到了同样的错误。