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



是否可以在没有实际文件的情况下创建文件流?

我试着解释一下:

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

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

但是我可以用假文件创建fileStream吗?

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

编辑。

我使用的是一个API示例,其中包含以下代码:

        FileStream s = new FileStream("FilePath", FileMode.Open, FileAccess.Read);
        try
        {
            SolFS.SolFSStream stream = new SolFS.SolFSStream(Storage, FullName, true, false, true, true, true, "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, 0, (int) ToRead);
                    stream.Write(buffer, 0, (int) ToRead);
                }  

所以它基本上是在某个地方写fileStream
我不想拿一个现有的文件来写,但我想"创建"一个没有内容的不同文件(我不需要内容),但要有真实文件的属性,如大小、名称、类型

显然,您想要一个不指向文件的FileStream(显式地具有其特定于FileStream的属性,如Name)。

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

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

  • 您可以将所需的所有属性存储在包装器中
  • 包装器可以包装任意的Stream,因此您可以在FileStreamMemoryStream或任何其他流类型之间自由选择

这里有一个例子:

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, FileMode.Open, FileAccess.Read));
}
public static StreamContainer CreateWithoutFile(string name)
{
    return new StreamContainer(name, new MemoryStream());
}

在您的应用程序中,如果您想要使用这样的命名流,请绕过StreamContainer,而不是直接期望Stream

相关内容

  • 没有找到相关文章

最新更新