Tag: io

C#:如何检查打开的文件是否已更新

例如,您知道该function,如果您在另一个编辑器中也有相同的文件,则打开C:\test.txt ,并在那里编辑它,当您返回时,应用程序将提示文件已更改,无论您是否要更新它。 如何检查文件是否已更新? UPDATE 问一个姐妹问题“ 使用FileSystemWatcher来监视文件的变化 ”

修饰符异步对此项无效

这似乎不是具有相同错误的数百个其他问题的重复。 我看了他们所有人,发现他们是无关的。 我正在制作一个小笔记应用程序,我正在尝试从目录中读取文件。 在MSDN示例之后,我有以下代码,但它给出了一个错误: 错误1修饰符’async’对此项无效C:\ Users \ Jase \ documents \ visual studio 2012 \ Projects \ AppNameHere \ AppNameHere \ DataModel \ AppNameHereDataSource.cs 192 9 AppNameHere 我的代码是: async public NotesDataSource() { StorageFolder documentsFolder = KnownFolders.DocumentsLibrary; StringBuilder outputText = new StringBuilder(); IReadOnlyList fileList = await documentsFolder.GetFilesAsync(); outputText.AppendLine(“Files:”); foreach (StorageFile file in fileList) { if (file.FileType […]

使用File.Copy移动文件或将流写入该位置有什么区别吗?

我正在重构一些代码,有一个问题,我可以使用一些评论。 原始代码将文件下载到流中。 然后,在使用File.Copy覆盖生产目录中的现有文件之前,它会将流写入临时目录中的File。 将它写入temp目录并使用File.Copy与仅将流写入生产目录相比,是否有任何好处? 一个原因可能是File.Copy比写入流更快,并且减少了某人在写入文件时读取文件的机会。 但这甚至会发生吗? 我还应该记住什么? 我正在考虑将temp目录分解出来。 MemoryStream stream = new MemoryStream(); ….Download and valiate stream…. using (Stream sourceFileStream = stream) { using (FileStream targetFileStream = new FileStream(tempPath, FileMode.CreateNew)) { const int bufferSize = 8192; byte[] buffer = new byte[bufferSize]; while (true) { int read = sourceFileStream.Read(buffer, 0, bufferSize); targetFileStream.Write(buffer, 0, read); if (read […]

如何使用C#同步并一致地删除NTFS上的文件夹

这个: Directory.Delete(dir, true); 是不同步的。 在紧接着的行中,您仍然可以操作/读取目录。 例如,这个: Directory.Delete(destinationDir, true); Directory.CreateDirectory(destinationDir); Thread.Sleep(1000); 导致文件夹不存在。 删除运行异步, CreateDirectory不创建,因为它已经存在,然后删除实际触发并删除目录。 是否有一个IO API可以提供一致性? 涉及Thread.Sleep答案将调用Zalgo。 我想要一个真正的解决方案。

如何在.Net MVC中将文件从磁盘流式传输到客户端浏览器

我的操作将文件从磁盘返回到客户端浏览器,目前我有: public FileResult MediaDownload () { byte[] fileBytes = System.IO.File.ReadAllBytes(Server.MapPath(filePath)); return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, fileName); } 这样它将整个文件加载到内存中并且非常慢,因为文件加载到内存后开始下载。 处理此类文件下载的最佳方法是什么? 谢谢

如何检查文件当前是打开还是在.NET中写入?

我正在尝试确定文件当前是打开还是使用C#写入。 我已经看到类似的SO问题,所有问题都与我的代码类似,它在文件上尝试File.Open。 但是当我使用下面的代码运行程序时,我也手动打开文件,我得到“文件当前未锁定”的意外结果。 任何想法/建议/我遗失的任何东西? using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Threading; namespace TestIfFileAccessed { class Program { static void Main(string[] args) { string path = @”C:\TEMP\testFile.txt”; FileInfo filepath = new FileInfo(path); if (IsFileLocked(filepath)) { Console.WriteLine(“File is currently locked”); Console.ReadLine(); } else { Console.WriteLine(“File is currently NOT locked”); Console.ReadLine(); } } […]

FileStream的同步要求。(开始/结束)(读/写)

.Net FileStream是否可以接受以下multithreading调用模式? 几个线程调用这样的方法: ulong offset = whatever; // different for each thread byte[] buffer = new byte[8192]; object state = someState; // unique for each call, hence also for each thread lock(theFile) { theFile.Seek(whatever, SeekOrigin.Begin); IAsyncResult result = theFile.BeginRead(buffer, 0, 8192, AcceptResults, state); } if(result.CompletedSynchronously) { // is it required for us to call AcceptResults […]

虚拟大数据从日志文件读入ListView

我一直在研究如何读取大型日志文件,大约500mbs并使用c#将它们解析为gui。 我是相当新的使用虚拟模式listview … 我决定使用带有虚拟模式的列表框(希望这可以处理大约1mil的日志消息)。 但我在将日志文件的行读入列表框时遇到问题。 我不想读取整个文件,因为它会使程序崩溃,所以我在foreach语句中使用File.ReadLines。 我想我在处理RetrieveVirtualItem处理程序时无法读取我的文件,并获得一个新行并填充它 private void listView1_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e) { ListViewItem lvi = new ListViewItem(); lvi.Text = addList(); // need to read a new row ListViewItem.ListViewSubItem lvsi = new ListViewItem.ListViewSubItem(); lvsi.Text = e.ItemIndex.ToString(“n”); lvi.SubItems.Add(lvsi); e.Item = lvi; } 我如何读取文件的每一行并将其与listview的虚拟检索方法相关联? 我最终想要添加搜索,因此它只显示匹配匹配的行。 我也不确定如何编辑listView1.VirtualListSize – 如何使这个变量等于匹配量? 我认为因为我需要一个值,因为我加载表单。

记录到内存然后写入文件

我想知道一些事情,我有这个循环运行了所有的日子(7次),然后在其中的另一个循环,运行文件中的所有记录。 (大约100000),所以总共约70万次,现在我想记录每个循环中的每个处理,并将其记录到文件中,假设我们第一次进入第一次循环,第一次进入第二次循环,我们每次记录,在文件中完成的操作。 但问题是,如果我每次都要记录,那么性能会受到极大的影响,因为有太多的IO操作,我在想的是有什么办法,我可以将每一步记录到内存中(内存流)或者任何东西)然后在外部循环结束时,将所有内存流数据记录到文件中? 如果我有话 for (int i=0; i<7; i++) { for (int j=0; j<RecordsCount; j++) { SomeOperation(); // I am logging to a file here right now } } 它严重损害了性能,如果删除日志文件,我可以提前完成它。 所以我认为首先登录到内存并将所有日志从内存写入文件会更好。 那么,有没有办法做到这一点? 如果有很多,最好的是什么? ps:这是一个记录器,我发现http://www.codeproject.com/Articles/23424/TracerX-Logger-and-Viewer-for-NET ,但我可以使用任何其他自定义记录器或其他任何需要的东西。 编辑:如果我使用内存流,然后将其全部写入文件,那么这会给我提供更好的性能,然后使用File.AppendAllLines如Yorye和zmbq的回答中所建议的那样,这是否会让我在Jeremy评论中获得任何性能提升?

C#似乎无法正确添加图像到ziparchive

我正在尝试将一堆文件添加到c#中的zip文件中,但它似乎无法正常工作。 using (var memoryStream = new MemoryStream()) { using (var zip = new ZipArchive(memoryStream, ZipArchiveMode.Create, true)) { for (int i = 0; i < kaart_data.GetLength(0); i++) { Image img = array[i]; var file = zip.CreateEntry(i + ".bmp"); using (var stream = new MemoryStream()) { img.Save(stream, ImageFormat.Bmp); using (var entryStream = file.Open()) { stream.CopyTo(entryStream); } } […]