标签: filestream

删除行后删除FILESTREAM文件

我已经在SQL 2008服务器上成功设置了FILESTREAM; 但是我注意到即使我删除了包含FILESTREAM数据的行,物理数据文件似乎也没有被删除.

通过物理文件,我指的是SQLServer托管目录中的文件,其唯一的文件名不是添加到dbase的原始文件.

有谁知道SQLServer最终是否会删除该文件?如果从dbase中删除了大量大文件,我希望能够快速回收这些空间.

sql blob filestream sql-server-2008

20
推荐指数
3
解决办法
1万
查看次数

19
推荐指数
1
解决办法
1万
查看次数

使用FileStream读取文本文件的实际内容和这些选项c#

我需要使用FileStream和下面提到的选项在C#中打开一个文本文件

var fileStream = new FileStream(filePath, 
                                FileMode.Open, 
                                FileAccess.Read, 
                                FileShare.Read, 64 * 1024,
                               (FileOptions)FILE_FLAG_NO_BUFFERING | 
                                  FileOptions.WriteThrough & FileOptions.SequentialScan);
Run Code Online (Sandbox Code Playgroud)

文本文件包含"1"或"0",在获得结果后,我将文本文件的内容分配给字符串变量.如果你感兴趣,我需要上面的选项,以避免Windows从缓存中读取文本文件.

System.IO.File.ReadAllText()
Run Code Online (Sandbox Code Playgroud)

......还不够好.

请有人能够写一个简单的子程序,其中包含了这些要求,因为我到目前为止看到的示例涉及使用字节和缓冲区(此时我真正需要处理的一个区域)并将其保留在.

谢谢

c# filestream

19
推荐指数
4
解决办法
5万
查看次数

FileStream和StreamWriter - 如何在写入后截断文件的其余部分?

var fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite);
using(var writer = new StreamWriter(fs))
    writer.Write(....);
Run Code Online (Sandbox Code Playgroud)

如果文件以前包含文本并且新写入的文本比文件中已有的文本短,那么如何确保文件中过时的尾随内容被截断?

请注意,在这种情况下,以截断模式打开文件不是一个选项.收到FileStream对象时文件已经打开.上面的代码只是为了说明流的属性.

编辑

扩展下面的答案,解决方案是:

var fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite);
using(var writer = new StreamWriter(fs))
{
    writer.Write(....);
    writer.Flush();
    fs.SetLength(fs.Position);
}
Run Code Online (Sandbox Code Playgroud)

.net io filestream streamwriter

18
推荐指数
1
解决办法
8140
查看次数

StreamWriter和IFormatProvider

如何将IFormatProvider传递给StreamWriter?

具体来说我想创建一个
new StreamWriter("myfile.txt", CultureInfo.InvariantCulture);

TextWriter和StringWriter在构造函数中有一个参数,但StreamWriter没有.
属性stringWriter.FormatProvider是readonly.

我可以想到三个似乎不好的解决方案:

  • 更改Thread.CurrentCulture:这将在库中,所以我宁愿不更改任何全局设置,即使是暂时的.
  • sw.WriteLine(InvariantCulture ,,):在很多函数中有很多sw.WriteLine().我真的很想避免弄乱他们所有人.
  • 首先使用StringWriter然后将字符串写入文件:由于流可能变得非常大,这将产生巨大的开销.

有没有办法为StreamWriter指定FormatProvider?如果我可以设置属性,则基于TextWriter的继承,StreamWriter必须具有处理此功能的方法.

c# cultureinfo filestream streamwriter iformatprovider

18
推荐指数
1
解决办法
4562
查看次数

Windows API似乎比BinaryWriter快得多 - 我的测试是否正确?

[编辑]

感谢@VilleKrumlinde,我修复了一个错误,我在尝试避免代码分析警告时不小心引入了这个错误.我不小心打开了"重叠"文件处理,它不断重置文件长度.现在已修复,您可以FastWrite()多次为同一个流调用而不会出现问题.

[结束编辑]


概观

我正在做一些时序测试,以比较两种不同的方式将结构数组写入磁盘.我相信人们认为,与其他事物相比,I/O成本是如此之高,以至于不值得花太多时间优化其他事情.

但是,我的时间测试似乎表明不是这样.要么我犯了一个错误(这是完全可能的),要么我的优化确实非常重要.

历史

首先是一些历史记录:此FastWrite()方法最初是在几年前编写的,用于支持将结构写入遗留C++程序所使用的文件,我们仍然将其用于此目的.(还有一个相应的FastRead()方法.)它的编写主要是为了更容易将blittable结构数组写入文件,其速度是次要问题.

不止一个人告诉我,这样的优化并不比使用a更快BinaryWriter,所以我终于咬了一口子并进行了一些时序测试.结果让我感到惊讶......

似乎是我的FastWrite()方法是30 -比同等使用快50倍BinaryWriter.这看起来很荒谬,所以我在这里发布我的代码,看看是否有人能找到错误.

系统规范

  • 测试了x86 RELEASE构建,从调试器的OUTSIDE运行.
  • 在Windows 8,x64,16GB内存上运行.
  • 在普通硬盘(不是SSD)上运行.
  • 在Visual Studio 2012中使用.Net 4(安装了.Net 4.5)

结果

我的结果是:

SlowWrite() took 00:00:02.0747141
FastWrite() took 00:00:00.0318139
SlowWrite() took 00:00:01.9205158
FastWrite() took 00:00:00.0327242
SlowWrite() took 00:00:01.9289878
FastWrite() took 00:00:00.0321100
SlowWrite() took 00:00:01.9374454
FastWrite() took 00:00:00.0316074
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,这似乎表明FastWrite()该运行速度提高了50倍.

这是我的测试代码.运行测试后,我做了这两个文件的二进制比较来验证它们确实是相同的(即FastWrite()SlowWrite()生产相同的文件).

看看你能做些什么.:)

using System;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using …
Run Code Online (Sandbox Code Playgroud)

c# optimization filestream

18
推荐指数
1
解决办法
1413
查看次数

重用文件流

在过去,我总是使用FileStream对象来写或重写整个文件,之后我会立即关闭流.但是,现在我正在开发一个程序,我想在其中保持FileStream打开,以便允许用户在两​​次保存期间保持对文件的访问.(见我之前的问题).

我正在使用XmlSerializer将我的类序列化为from和XML文件.但是现在我保持FileStream打开,以便稍后用于保存(重新序列化)我的类实例.如果我重复使用相同的文件流而不是使用新的文件流,是否需要进行任何特殊考虑?我是否需要在保存之间将流重置为开头?如果稍后保存的大小比以前的保存小,那么FileStream将保留旧文件中的剩余字节,从而创建一个损坏的文件?我是否需要做一些事情来清除文件,以便它表现得好像我每次都在写一个全新的文件?

.net c# file-io filestream

17
推荐指数
3
解决办法
1万
查看次数

以编程方式下载pdf

如何使用vb.NET或C#下载PDF并存储到磁盘?

URL(PDF)在达到最终PDF之前会进行一些重做.

我试过以下但是当我尝试在本地打开时,PDF似乎已损坏,

Dim PdfFile As FileStream = File.OpenWrite(saveTo)
Dim PdfStream As MemoryStream = GetFileStream(pdfURL)
PdfStream.WriteTo(PdfFile)
PdfStream.Flush()
PdfStream.Close()
PdfFile.Flush()
PdfFile.Close()
Run Code Online (Sandbox Code Playgroud)

c# vb.net pdf download filestream

16
推荐指数
2
解决办法
3万
查看次数

Python读取流

我需要一种非常便宜的方法来读取Python中没有终止字符串(流)的缓冲区.这就是我所拥有的,但它耗费了大量的CPU时间和精力.因为它经常"尝试和捕捉".我真的需要一种新的方法.

这是我的代码的简化工作版本:

#! /usr/bin/env/ python
import fcntl, os, sys

if __name__ == "__main__":
    f = open("/dev/urandom", "r")
    fd = f.fileno()
    fl = fcntl.fcntl(fd, fcntl.F_GETFL)
    fcntl.fcntl(fd, fcntl.F_SETFL, fl | os.O_NONBLOCK)

    ready = False
    line = ""
    while True:
        try:
            char = f.read()
            if char == '\r':
                continue
            elif char = '\n':
                ready = True
            else:
                line += char
        except:
            continue
        if ready:
            print line
Run Code Online (Sandbox Code Playgroud)

不要在终端中运行它.这只是为了说明."urandom"将破坏你的终端,因为它会吐出很多随机字符,终端模拟器无论解释什么(可以改变你当前的shell设置,标题等).我正在读取通过usb连接的gps.

问题:这可以使用100%的CPU使用率.我试过这个:

#! /usr/bin/env/ python
import fcntl, os, sys

if __name__ == …
Run Code Online (Sandbox Code Playgroud)

python filestream

16
推荐指数
2
解决办法
5万
查看次数

使用FileStream.ReadAsync()时,我应该以异步模式打开文件吗?

执行异步I/O的旧.Net方式FileStream是使用FileStream.BeginRead()FileStream.EndRead().

状态的MSDN文档FileStream.BeginRead():

FileStream提供两种不同的操作模式:同步I/O和异步I/O. 虽然可以使用其中任何一种,但底层操作系统资源可能仅允许以这些模式之一进行访问.

默认情况下,FileStream会同步打开操作系统句柄.在Windows中,这会降低异步方法的速度.如果使用异步方法,请使用FileStream(String,FileMode,FileAccess,FileShare,Int32,Boolean)构造函数.

.Net 4.5x对执行异步I/O的方式FileStream是使用Stream.ReadAsync().

MSDN文档FileStream.ReadAsync()直接链接到文档的链接Stream.ReadAsync().本文档未提及在异步模式下打开文件的任何需要; 实际上,文档中的示例代码显然没有这样做.

因此,我假设在使用时File.ReadAsync()不需要以异步模式打开文件.

这个假设是否正确?

[编辑]

我刚刚发现了一篇关于使用Async for File Access的MSDN文章.

这表明:

本主题中的示例使用FileStream类,该类具有导致在操作系统级别发生异步I/O的选项.通过使用此选项,您可以避免在许多情况下阻止ThreadPool线程.

要启用此选项,请在构造函数调用中指定useAsync = true或options = FileOptions.Asynchronous参数.

所以,现在我在想,我应该可以打开该文件在异步模式......如果是这样,这是有点遗憾的是,在文档中提供的示例代码ReadAsync()不能打开该文件异步!

c# filestream beginread async-await

16
推荐指数
1
解决办法
2243
查看次数