【问题标题】:FileStream with querystring in filename?文件名中带有查询字符串的 FileStream?
【发布时间】:2011-04-07 14:44:03
【问题描述】:

我需要能够打开磁盘上的文件,但通过查询字符串将参数传递给该文件。它是一个 .SWF 文件,因此我传入了使其正确加载所需的参数。

我使用的代码是:

FileStream fs = new FileStream(@"C:\test\file.swf?key=value", FileMode.Open, FileAccess.Read);

打开文件时出现错误:“路径中的字符无效”,因为“?”在文件名中。有没有办法使用文件名中的查询字符串将文件从磁盘加载到 FileStream 对象中?

【问题讨论】:

  • 我不明白:文件是一个文件,当你得到一个文件时你没有执行任何东西,你只是得到它的内容,那你为什么要发送参数?你想做什么?
  • 我这样做的原因有很多,全部都在问题的范围之外。在高层次上,我正在加载的 .SWF(在我的示例中为 file.swf)是一个 shell。我发送的参数实际上是“Filename=realSwfFile.swf”,它是加载正确内容的 .SWF。我将其加载到处理这些类型的事物的 Flash 对象中,并且在加载 Flash 文件时它使用 FileStream 作为它的基础。这是给我老板的概念证明。
  • querystring 是一个 http/web 概念...当您请求即 some.thing/file.swf?key=value 时,qs 不会传递给文件本身,但在浏览器中运行的 flash 运行时可以询问 qs 是什么用于请求文件。我不知道您将文件加载到哪个运行时,但它也必须有某种方法来设置 qs。

标签: c# file-io filestream


【解决方案1】:

我认为你不能做你想做的事。当您从磁盘加载文件时,查询字符串不作为一个概念存在。它只会返回 SWF 文件中包含的字节。

查询字符串在执行级别很重要。

【讨论】:

    【解决方案2】:

    所以我通过将我的两个 SWF 文件放在 Web 服务器上并使用以下代码解决了这个问题。不完全是生产就绪的代码,但它说明了这个概念。

    private static FileStream GetFileStream()
    {
        string url = @"http://www.someurl.com/shell.swf?Filename=actualfile.swf";
    
        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
        WebResponse response = request.GetResponse();
    
        byte[] result = null;
        int byteCount = Convert.ToInt32(response.ContentLength);
        using (BinaryReader reader = new BinaryReader(response.GetResponseStream()))
            result = reader.ReadBytes(byteCount);
    
        return new FileStream(result);
    }
    

    【讨论】:

      猜你喜欢
      • 2011-04-17
      • 2012-11-03
      • 1970-01-01
      • 2012-11-24
      • 2010-12-31
      • 1970-01-01
      • 1970-01-01
      • 2012-03-23
      • 1970-01-01
      相关资源
      最近更新 更多