加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

创建没有文件c#的文件流

发布时间:2020-12-15 21:59:05 所属栏目:百科 来源:网络整理
导读:是否可以在没有实际文件的情况下创建文件流? 我会试着解释一下: 我知道如何从真实文件创建流: FileStream s = new FileStream("FilePath",FileMode.Open,FileAccess.Read); 但我可以创建一个伪文件的fileStream吗? 含义: ?定义属性,如名称,类型,大小,以
是否可以在没有实际文件的情况下创建文件流?

我会试着解释一下:

我知道如何从真实文件创建流:

FileStream s = new FileStream("FilePath",FileMode.Open,FileAccess.Read);

但我可以创建一个伪文件的fileStream吗?

含义:
?定义属性,如名称,类型,大小,以及其他任何必要的东西,对某些文件对象(有这样的东西吗?),没有内容,只有所有的属性,
然后从这个“文件”创建一个fileStream?得到的结果与上面的代码类似?

编辑.

我正在使用具有该代码的API示例:

FileStream s = new FileStream("FilePath",FileAccess.Read);
        try
        {
            SolFS.SolFSStream stream = new SolFS.SolFSStream(Storage,FullName,true,false,"pswd",SolFS.SolFSEncryption.ecAES256_SHA256,0);
            try
            {
                byte[] buffer = new byte[1024*1024];
                long ToRead = 0;
                while (s.Position < s.Length)
                {
                    if (s.Length - s.Position < 1024*1024)
                        ToRead = s.Length - s.Position;
                    else
                        ToRead = 1024 * 1024;
                    s.Read(buffer,(int) ToRead);
                    stream.Write(buffer,(int) ToRead);
                }

所以它基本上是在某处写入fileStream“s”.
我不想拿一个现有的文件写它,但我想“创建”一个没有内容的不同文件(我不需要内容),但要拥有真实文件的属性,如大小,名称,键入

解决方法

显然,您希望拥有一个 FileStream(明确使用其特定于FileStream的属性,如 Name),它不指向文件.

据我所知,这是不可能基于FileStream的实现.

但是,创建具有所需属性的包装类将是一个简单的解决方案:

>您可以在包装器中存储所需的所有属性.
>包装器可以包装任意Stream,因此您可以自由选择FileStream,MemoryStream或任何其他流类型.

这是一个例子:

public class StreamContainer
{
    public StreamContainer(string name,Stream contents)
    {
        if (name == null) {
            throw new ArgumentNullException("name");
        }
        if (contents == null) {
            throw new ArgumentNullException("contents");
        }

        this.name = name;
        this.contents = contents;
    }

    private readonly string name;

    public string Name {
        get {
            return name;
        }
    }

    private readonly Stream contents;

    public Stream Contents {
        get {
            return contents;
        }
    }
}

当然,您可以为各种流类型添加一些礼貌的创建方法(作为上述类中的静态方法):

public static StreamContainer CreateForFile(string path)
{
    return new StreamContainer(path,new FileStream(path,FileAccess.Read));
}

public static StreamContainer CreateWithoutFile(string name)
{
    return new StreamContainer(name,new MemoryStream());
}

在您的应用程序中,无论您想要使用这样的命名流,都要传递StreamContainer,而不是直接期望Stream.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读