Tag: filestream

关闭没有Flush()的文件流

我可以在不调用Flush情况下关闭文件流(在C#中)吗? 我知道Close和Dispose调用Flush方法。

返回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 […]

Stream.CopyTo()方法可以保存流不完整吗?

我有一个WCF服务,允许我以块的forms上传文件。 我想知道的是,此代码是否可能导致上传的流在任何情况下仅部分附加到目标流? 我有我的日志,告诉我所有发送的流都是512000字节(我在客户端设置),到目前为止我已经从9个块中发送了6个块。 但在服务器上,文件大小为2634325.这意味着发送的最后一个块(第6个)保存不完整。 什么可能导致这种行为? 我应该怎么做才能避免这种情况? 或者这是完全安全的,我应该在其他地方寻找错误? public void UploadChunk ( RemoteFileChunk file ) { /// this file is not touched by anyone else var uploadPath = @”C:\some path\some.file”; using ( var targetStream = new FileStream(uploadPath, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None) ) { if ( targetStream.Length == file.ChunkNumber * Helper.ChunkSize ) { /// —- streaming operation is […]

如何在Entity Framework 4.0模型中添加第一个设计器的文件流列?

我正在使用EF 4.0设计器通过单击“从模型生成数据库”来创建数据库。 我不想使用sql 2008列类型“filestream”。 不幸的是,我不能从特定列的Type DropDownList中选择“filestream”。 那么,我如何首先使用EF 4.0模型的文件流? 到目前为止,我已经搜索了一些SQL脚本来手动添加这些列,但是通过SQL脚本添加它们意味着我的模型中没有它们。 我该怎么办?

C# – FileStream:既可以锁定文件又可以在不截断文件的情况下读取文件并将其截断

我想我的标题不是那么清楚。 我会试着解释一下: 我可以使用FileStream编写和读取文件 FileStream fs = new FileStream(“C:\\Users\\Public\\text.txt”, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None); private void button1_Click(object sender, EventArgs e) { fs.Seek(0,0); StreamReader sr = new StreamReader(fs); textbox.Text = sr.ReadToEnd(); } private void button2_Click(object sender, EventArgs e) { StreamWriter sw = new StreamWriter(fs); sw.Write(textbox.Text); sw.Flush(); } 这种方式其他程序无法使用该文件,但我也无法删除内容。 写入它只会添加字符串,它不会替换内容。 或者我可以在没有FileStream的情况下完成: private void button1_Click(object sender, EventArgs e) { StreamReader sr […]

FileStream和C#中的FileSystemWatcher,奇怪的问题“进程无法访问文件”

我有这个复杂的代码库,它正在侦听某个文件夹上的FileCreated事件。 当文件被创建(其中还包括将文件移动到该文件夹​​)时,我想读取该文件并对其执行某些操作。 它适用于第一个文件,但在所有其他尝试之后抛出exception。 在调试模式下(使用VisualStudio),将抛出错误,但如果我只是单击“继续”…它将工作(没有错误)。 我发布了简化代码,它演示了这个问题。 例如,启动应用程序,单击“开始”按钮,然后“创建新文本文件” 输出是: Working 如果您以完全相同的方式创建2ed文件,则输出为: Broken: The process cannot access the file ‘C:\TestFolder\New Text Document (2).txt’ because it is being used by another process. Working, after breaking 在查看我的代码之后,您将看到上面的打印输出意味着首先抛出了“无法访问文件”exception,但是在catch语句中执行相同的调用突然起作用。 这对我来说没有任何意义,因为该文件显然没有被其他任何东西使用(我刚刚创建它)..并且无论如何它会在一秒后工作…. 以下是我的代码 XAML: 代码背后: using System; using System.Diagnostics; using System.IO; using System.Threading; using System.Windows; using System.Windows.Controls; using System.Windows.Input; namespace WpfApplication1 { public partial […]

可以使用FileShare.Delete导致UnauthorizedAccessException吗?

我正在使用以下代码打开一个文件,用于读取我之前在用户的%TEMP%文件夹中创建的文件: new FileStream(cacheFileName, FileMode.Open, FileAccess.Read, FileShare.Read | FileShare.Delete); 在某些用户的计算机上,这有时会抛出UnauthorizedAccessException,并显示消息“访问路径…被拒绝”。 我无法重现这一点。 我最初的猜测是反病毒或索引引擎正在做一些时髦的事情,但我也注意到这段代码正在使用“FileShare.Delete”,我不确定应该在那里。 是否存在使用“FileShare.Delete”导致UnauthorizedAccessException的情况?

重用文件流

在过去,我总是使用FileStream对象来写或重写整个文件,之后我会立即关闭流。 但是,现在我正在开发一个程序,我想在其中保持FileStream打开,以便允许用户在两​​次保存期间保持对文件的访问。 (见我之前的问题 )。 我正在使用XmlSerializer将我的类序列化为from和XML文件。 但是现在我保持FileStream打开以便稍后用于保存(重新序列化)我的类实例。 如果我重复使用相同的文件流而不是使用新的文件流,是否需要进行任何特殊考虑? 我是否需要在保存之间将流重置为开头? 如果稍后保存的大小小于先前的保存,则FileStream将保留旧文件中的剩余字节,从而创建损坏的文件? 我是否需要做一些事情来清除文件,以便它表现得好像我每次都在写一个全新的文件?

FileSystemWatcher触发文件流打开

我有一个filesystemwatcher,它会在修改文件时触发事件。 一旦锁定被删除,我想从该文件中读取。 目前,我只是在触发事件时尝试打开文件,当复制大文件时,文件锁在事件发送后保持一段时间,从而阻止文件被打开以进行读取访问。 有什么建议?

如何将流的子部分公开给用户

我有一个包含许多数据的流。 我想在另一个流中公开一段数据。 我想要提取的数据通常超过100mb。 由于我已经拥有数据流,因此将数据复制到另一个流并返回它似乎是一种浪费。 我正在寻找的是一种方法来引用第一个流中的数据,同时控制第二个流可以引用的数量。 这可能吗