首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SqlFileStream追加新数据创建新文件

SqlFileStream追加新数据创建新文件
EN

Stack Overflow用户
提问于 2014-01-04 23:58:17
回答 1查看 646关注 0票数 1

我将文件分几个部分发送给SqlFileStream。如下所示:

代码语言:javascript
复制
public void StreamFile(int storageId, Stream stream)
{
    var select = string.Format(
                 @"Select TOP(1) Content.PathName(),
                 GET_FILESTREAM_TRANSACTION_CONTEXT() FROM FileStorage WHERE FileStorageID={0}",
                 storageId);

    using (var conn = new SqlConnection(this.ConnectionString))
    {
        conn.Open();
        var sqlTransaction = conn.BeginTransaction(IsolationLevel.ReadCommitted);

        string serverPath;
        byte[] serverTxn;
        using (var cmd = new SqlCommand(select, conn))
        {
            cmd.Transaction = sqlTransaction;
            using (SqlDataReader rdr = cmd.ExecuteReader())
            {
                rdr.Read();
                serverPath = rdr.GetSqlString(0).Value;
                serverTxn = rdr.GetSqlBinary(1).Value;
                rdr.Close();
            }
        }

        this.SaveFile(stream, serverPath, serverTxn);
        sqlTransaction.Commit();
    }
}

private void SaveFile(Stream clientStream, string serverPath, byte[] serverTxn)
{
    const int BlockSize = 512;
    using (var dest = new SqlFileStream(serverPath, serverTxn, 
    FileAccess.ReadWrite, FileOptions.SequentialScan, 0))
    {    
        var buffer = new byte[BlockSize];
        int bytesRead;
        dest.Seek(dest.Length, SeekOrigin.Begin);
        while ((bytesRead = clientStream.Read(buffer, 0, buffer.Length)) > 0)
        {
            dest.Write(buffer, 0, bytesRead);
        }
    }
    clientStream.Close();
}

我试着上传10部分文件。当我查找文件夹在哪里保存数据时,我看到了10个文件。对于每一个额外的部分,SqlFilesStream创建一个新的文件。最后一个文件保存了所有数据,但rest文件不必要地浪费了空间。是否可以将所有数据保存在一个文件-最后一个附加操作中?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-20 18:33:53

SqlFileStream不支持“部分更新”。每次内容更改时,都会将一个新文件写入磁盘。这些额外的文件将被取消引用,最终将被清理,但在此之前,它们将影响您的备份/日志/等等。

如果要将所有数据放在一个文件中,则需要在单个流中处理整个文件。

如果您不需要支持大型文件(>2GB),并且需要进行大量的小部分更新,那么最好将文件存储在VARBINARY(MAX)列中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20928281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档