Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 创建没有文件c的文件流#_C#_Visual Studio 2010_Stream_Filestream - Fatal编程技术网

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

C# 创建没有文件c的文件流#,c#,visual-studio-2010,stream,filestream,C#,Visual Studio 2010,Stream,Filestream,是否可以在没有实际文件的情况下创建文件流 我会尽力解释: 我知道如何从真实文件创建流: FileStream s = new FileStream("FilePath", FileMode.Open, FileAccess.Read); 但是我可以用一个假文件创建一个文件流吗 意思: 为某个文件对象(有这样的东西吗?)定义属性,例如名称、类型、大小,以及任何其他必要的属性,没有内容,只有所有属性, 然后从这个“文件”创建一个文件流?要得到与上述代码类似的结果 编辑 我使用的API示例包含以下代

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

我会尽力解释:

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

FileStream s = new FileStream("FilePath", FileMode.Open, FileAccess.Read);
但是我可以用一个假文件创建一个文件流吗

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

编辑

我使用的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);
                }  
filestreams=newfilestream(“FilePath”,FileMode.Open,FileAccess.Read);
尝试
{
SolFS.SolFSStream=新的SolFS.SolFSStream(存储,全名,真,假,真,真,真,“pswd”,SolFS.SolFSEncryption.ecAES256_SHA256,0);
尝试
{
字节[]缓冲区=新字节[1024*1024];
长探路者=0;
而(s.位置
因此,它基本上是在某个地方写入文件流。

我不想获取现有文件并编写它,但我想“创建”一个没有内容的不同文件(我不需要内容),但要具有真实文件的属性,如大小、名称、类型

显然,您需要一个(明确地使用其
文件流
特定属性,如)它不指向文件

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

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

  • 您可以在包装器中存储所需的所有属性
  • 包装器可以包装任意流,因此您可以在
    FileStream
    或任何其他流类型之间自由选择
以下是一个例子:

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;
        }
    }
}
当然,您可以为各种流类型添加一些礼貌的创建方法(作为上述类中的静态方法):


在您的应用程序中,无论您想在何处使用这样一个命名流,都要传递
StreamContainer
,而不是直接期待一个

之后您打算如何处理该流?(大多数流没有“名称”等)
MemoryStream
可能对您来说已经足够好了,但我们不知道您想要实现什么。您的意思是什么?新的FileStream并不要求文件实际存在,所以您可以使用它来创建文件。只需使用类似于
FileMode.create
的东西。以后,当您不需要文件时,为什么不使用MemoryStream呢当您想将其保存到文件时,您可以将其转换。A是A。不需要在那里转换任何内容。此外,当您有
FileStream
时,您会自动拥有一个文件,因为
FileStream
类似于文件的面向对象表示形式。没有文件,就没有
FileStream
,尽管有不同的流类型,其行为基本上与没有文件支持的
FileStream
相同。如果您想要一个空文件(即没有内容的实际文件-大小=0),您的问题有点混乱,为什么不创建一个没有内容的文件呢?请参阅。您可以稍后写入。如果您需要一个在系统中不可见的文件,为什么首先需要一个
FileStream
?我使用了字典
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());
}