Tag: file io

在C#中预分配文件空间?

我正在创建一个下载应用程序,我希望在它们实际下载之前预先在硬盘上分配文件的空间,因为它们可能相当大,没有人喜欢看到“此驱动器已满,请删除一些文件,然后重试。 “ 所以,从那个角度来看,我写了这个。 // Quick, and very dirty System.IO.File.WriteAllBytes(filename, new byte[f.Length]); 它可以工作,至少你下载一个几百MB的文件,甚至可能是GB的文件,如果没有完全消除页面文件并完全杀死你的系统内存,你就会把Windows扔进一个疯狂的狂热中。 哎呀。 所以,通过一点启示,我开始使用以下算法。 using (FileStream outFile = System.IO.File.Create(filename)) { // 4194304 = 4MB; loops from 1 block in so that we leave the loop one // block short byte[] buff = new byte[4194304]; for (int i = buff.Length; i < f.Length; i += buff.Length) […]

C#文件处理:在可执行文件所在的目录中创建文件

我正在创建一个独立的应用程序,将分发给许多用户。 现在每个人都可以将可执行文件放在他们机器上的不同位置 我希望在执行可执行文件的目录中创建一个新文件。 因此,如果用户的可执行文件在: C:\exefile\ 在那里创建文件,但是如果用户将可执行文件存储在: C:\Users\%Username%\files\ 应该在那里创建新文件。 我不希望在我的应用程序中硬编码路径,但确定可执行文件存在的位置并在该文件夹中创建文件。 我怎样才能做到这一点?

c#替换文件中的字符串

替换HTML文件内容的一部分时,String.Replace似乎无法正常工作。 例如,String.Replace用blah blah blah html>替换 blah blah blah html> – 注意第二个HTML结束标记未正确关闭,因此在页面呈现时显示用户的浏览器。 任何人都知道为什么它没有按预期工作? StreamReader sr = fi.OpenText; String fileContents = sr.ReadToEnd(); sr.close(); fileContents = fileContents.Replace(“”, “”); fileContents = fileContents.Replace(“”,”blah blah blah “); StreamWriter sw = new StreamWriter(fi.OpenWrite()); sw.WriteLine(contents); sw.close();

默认/相对路径解析如何在.NET中工作?

所以…我曾经认为,当你访问一个文件但指定了没有路径的名称(在我的情况下是CAISLog.csv)时,.NET会希望文件驻留在与正在运行的.exe相同的路径上。 当我逐步完成解决方案(C#.NET2。* VS2K5)但我在正常模式下运行应用程序(由Websphere MQ触发器监视器启动并在后台作为网络服务运行)而不是访问文件时在.exe是在C:\ WINDOWS \ system32中查找的路径。 如果它重要父任务的.exe与我的应用程序几乎在同一文件夹结构/路径中 我收到一个匹配的错误:“ System.UnauthorizedAccessException:拒绝访问路径’C:\ WINDOWS \ system32 \ CAISLog.csv’。 ” 我的解决方法是完全限定我的文件的位置。 然而,我想要理解的是“在IO期间仅指定文件名时,管理路径如何解析的.NET规则是什么?” 我觉得我错过了一些基本的概念,这让我很烦。 编辑 – 我不确定它本身是一个.NET规则,但Schmuli似乎更清楚地解释了这个概念。 我一定会在将来尝试Rob Prouse的建议,所以+1也是如此。 如果有人有一些重写措辞的建议,强调我并不真正关心找到我的.exe的路径 – 而只是不明白相关路径解决方案发生了什么(我可能仍然把我的终端文件搞砸了) …

读取内存中的整个文件VS读取块

我对C#和编程比较陌生,所以请耐心等待。 我正在开发一个应用程序,我需要读取一些文件并以块的forms处理这些文件(例如,数据以48字节的块为单位处理)。 我想知道什么是更好的,性能方面的,在内存中一次读取整个文件然后处理它或以块的forms读取文件并直接处理它们或以更大的块读取数据(多个数据块是然后处理)。 到目前为止我如何理解事物: 读取内存中的整个文件 优点: – 它很快,因为最昂贵的操作是寻求,一旦头部就位,它可以读得非常快 缺点: – 它耗费了大量的内存 – 它在很短的时间内消耗了大量内存(这是我主要害怕的,因为我不希望它明显影响整体系统性能) 以块的forms读取文件 优点: – 实施起来更容易(更直观) while(numberOfBytes2Read > 0) read n bytes process read data – 消耗很少的内存 缺点: – 如果磁盘必须再次寻找文件并将磁头移动到适当的位置,这可能需要更多的时间,平均成本约为12毫秒。 我知道答案取决于文件大小(和硬件)。 我认为最好一次读取整个文件,但是对于大文件是多少这样, 一次在内存中读取的最大建议大小是多少(以字节为单位或相对于硬件 – 例如RAM的百分比)? 谢谢你的答案和时间。

在“using”语句中使用yield时,Dispose何时发生?

我有一个关于延迟执行和处理数据的问题。 请考虑以下示例: private IEnumerable ParseFile(string fileName) { using(StreamReader sr = new StreamReader(fileName)) { string line; while((line = sr.ReadLine()) != null) { yield return line; } } } private void LineReader(string fileName) { int counter = 0; foreach(string line in ParseFile(fileName)) { if(counter == 2) { break; // will this cause a dispose on the StreamReader? […]

锁定文件以进行写入/删除,同时允许任何进程读取

我正在使用C#(.NET)开发应用程序,并且在处理文件锁定时遇到问题。 我的主应用程序(A)需要对某个文件进行读/写访问。 单独的应用程序(B)需要对同一文件的读访问权。 我的应用程序(A)正在运行时,我需要阻止用户编辑或删除文件。 应用程序(A)是长期运行的。 在(A)运行时,不得删除该文件,即使没有主动读取或写入该文件也是如此。 我完全控制了(A)和(B)的来源,所以我可以修改它们中的任何一个。 如何在应用程序(A)运行时阻止用户修改/删除文件,同时允许应用程序(A)读/写,应用程序(B)读取?

文件正在被复制吗?

可能重复: C# – 不时检查文件是否存在并从中读取 我正在使用文件观察器来检查文件是否在目录中被写入。 如果是,那么我想打开它并删除到另一个目录。 我的方法也是使用FileShare.None来确保独占访问。 我做的是: class Program { private static void Main(string[] args) { FileSystemWatcher fileWatcher = new FileSystemWatcher(); fileWatcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName; fileWatcher.Created += fileWatcher_Created; fileWatcher.EnableRaisingEvents = true; Console.ReadLine(); } private static void fileWatcher_Created(object sender, FileSystemEventArgs e) { WorkOnFile(e.FullPath); } //must be done completely. How do […]

使用换行符将文本转储到文件

private void btnDump_Click(object sender, EventArgs e) { using (StreamWriter sw = new StreamWriter(“E:\\TestFile.txt”)) { // Add some text to the file. sw.WriteLine(txtChange.Text); } } 这会将txtChange的文本转储到文本文件中。 txtChange是一个富文本框,其中包含换行符(换行符)。 当用户单击“转储”按钮时,所有文本都被转储但不在新行上。 例如txtChange看起来像 1 2 3 4 转储文本看起来像1234 如何格式化文本的转储以使文本在新行上?

从asp.net打开任何文件

如何以编程方式在ASP.NET中打开由路径指定的任何文件? 我尝试了下面的代码片段,但它读取文件的内容而不是打开文件: string fileName = @”C:\deneme.txt”; StreamReader sr = File.OpenText(fileName); while (sr.Peek() != -1) { Response.Write(sr.ReadLine() + “”); } sr.Close(); 我也尝试了File.Open method 。