当前位置:编程学习 > C#/ASP.NET >>

C#中怎么访问嵌入的资源?

我在[解决方案资源管理器]添加现有项,向程序添加了磁盘上的一个文件d:\123.mp3,并设置属性为嵌入的资源。

但是我要怎么才能使用这个文件呢? --------------------编程问答-------------------- Assembly里面 --------------------编程问答-------------------- 怎么用代码来访问呢?

例如我要将其拷贝到textBox1.text所指定的路径中 --------------------编程问答--------------------

        private void button1_Click(object sender, EventArgs e)
        {
            System.IO.FileStream f = new System.IO.FileStream(textBox1.text, System.IO.FileMode.Create);
            f.Write(Test.Properties.Resources._123, 0,Test.Properties.Resources._123.Length);
            f.Close();
        }
--------------------编程问答-------------------- Test.Properties.Resources._123

这是什么?

MSDN上都查不到
Test是什么?命名空间?类?
况且代码中没出现d:\123.mp3,你怎么访问?

1 楼麻烦说清楚点
谢谢各位了 --------------------编程问答-------------------- Test.Properties.Resources._123  是 LS举例说明的资源名称,
换成你的就是123.mp3。因为已经编译进程序了,可以按照上述方法进行读取并在TextBox显示

--------------------编程问答-------------------- 1.用到的命名空间:
System.Reflection;

2.用法,将资源读出到Stream流中,然后使用.
Assembly assembly = GetType().Assembly;
System.IO.Stream streamSmall = assembly.GetManifestResourceStream("NameSpace.Folder.1.jpg");

注:里面的格式为:    命名控件.文件夹名.文件名(包含扩展名)

3.说明: 对与静态函数(static),不能直接调用资源;可改为类(class)实现,在非静态函数中实现资源调用

还有:
http://blog.csdn.net/venus0314/archive/2005/12/30/566545.aspx
--------------------编程问答-------------------- Test.Properties.Resources._123     是   LS举例说明的资源名称,


关键是Test.Properties.Resources是什么东西?
命名空间?类?
找遍msdn没有Test这么一个东西 --------------------编程问答-------------------- 6楼能写得清楚一点吗?
我按你的方法写了后,发生异常“未将对象引用设置到对象的实例”

我的方法是:
添加现有项为E:\music.樱花草.avi
然后在属性的生成操作中不知选哪个(无\编译\内容\嵌入的资源?)
代码:
using System.IO;
using System.Reflection;


Assembly assembly = GetType().Assembly;
Stream streamSmall = assembly.GetManifestResourceStream(@"NameSpace.E:\music.樱花草.avi");
//按你的说法,不是E:\music\樱花草.avi,而是E:\music.樱花草.avi
int length=(int)streamSmall.Length;//发生异常“未将对象引用设置到对象的实例”
byte[] bs = new byte[length];
streamSmall.Read(bs, 0, length);
File.WriteAllBytes(@"d:\a.avi", bs);
streamSmall.Close(); --------------------编程问答-------------------- 6楼能写得清楚一点吗?
我按你的方法写了后,发生异常“未将对象引用设置到对象的实例”

我的方法是:
添加现有项为E:\music.樱花草.avi
然后在属性的生成操作中不知选哪个(无\编译\内容\嵌入的资源?)
代码:
using System.IO;
using System.Reflection;


Assembly assembly = GetType().Assembly;
Stream streamSmall = assembly.GetManifestResourceStream(@"NameSpace.E:\music.樱花草.avi");
//按你的说法,不是E:\music\樱花草.avi,而是E:\music.樱花草.avi
int length=(int)streamSmall.Length;//发生异常“未将对象引用设置到对象的实例”
byte[] bs = new byte[length];
streamSmall.Read(bs, 0, length);
File.WriteAllBytes(@"d:\a.avi", bs);
streamSmall.Close(); --------------------编程问答-------------------- 6楼能写得清楚一点吗?
我按你的方法写了后,发生异常“未将对象引用设置到对象的实例”

我的方法是:
添加现有项为E:\music.樱花草.avi
然后在属性的生成操作中不知选哪个(无\编译\内容\嵌入的资源?)
命名控件不知什么东西

(如果方便的话,请把完整代码发到我的邮箱ssyfzy@126.com)

代码:
using System.IO;
using System.Reflection;


Assembly assembly = GetType().Assembly;
Stream streamSmall = assembly.GetManifestResourceStream(@"NameSpace.E:\music.樱花草.avi");
//按你的说法,不是E:\music\樱花草.avi,而是E:\music.樱花草.avi
int length=(int)streamSmall.Length;//发生异常“未将对象引用设置到对象的实例”
byte[] bs = new byte[length];
streamSmall.Read(bs, 0, length);
File.WriteAllBytes(@"d:\a.avi", bs);
streamSmall.Close(); --------------------编程问答-------------------- "NameSpace.E:\music.樱花草.avi "
namespace:名称空间,就是你那个工程的名称空间,比如using System.IO,System.IO就是名称空间.
文件夹名,是相对路径,不是绝对路径.拷贝music连同你的avi文件到project下,应该就是这样的youprojectnamespace.music.樱花草.avi --------------------编程问答-------------------- global::后面跟上FullName,这应该是最简单的方法了 --------------------编程问答-------------------- 可以参考VS生成的代码 --------------------编程问答-------------------- 帮顶
有时间帮下我

http://topic.csdn.net/u/20071116/16/6335ac42-b994-4e26-b6cd-4e4e6870551b.html --------------------编程问答-------------------- mythad

算了,感谢你的回答,不想跟你浪费时间了,邮箱都给你了,也不发,问你生成的操作选哪一个也不说
还什么相对路径?!添加进去就成了:
E:\Program Files\Microsoft Visual Studio 8\Projects\WindowsApplication3\WindowsApplication3\樱花草MTV-Sweety.avi

相对什么?

不管怎么试,用你的方法一个结果:未将对象引用设置到对象的实例

连你都说了:“应该”就是这样的youprojectnamespace.music.樱花草.avi

说明你根本就没有试过

有时间回帖,干嘛不自己试试呢?

并不是我对你不够友好,只是我的网速太慢,进入网站太慢,实在不想反复纠缠下去
抱歉 --------------------编程问答-------------------- 自己整明白了,谢谢各位的关心 --------------------编程问答-------------------- 哎,转到C#不容易啊! --------------------编程问答-------------------- to ApiToSharp :
  我好心回答你的问题你就这样说话?根本就是你自己不会,还怪我解答的不清楚,好,我就给你也就是一遍,大家也可以鉴定一下.邮箱你什么时候给我了,在哪?源码我会给你发过去.你自己好好看看,好好想想.

环境:vs2005+winxp
1.建立windows application,什么也不用管,确定;
2.新建文件夹,取名folder;
3.copy 一张图片(我的6.jpg)到你的folder下,设置属性->嵌入的资源;//我怀疑你这里都没设置
4.放个picturebox到窗体上;
5.双击窗体,再窗体load事件中加入如下代码:
            Assembly assembly = this.GetType().Assembly;
            System.IO.Stream streamSmall = assembly.GetManifestResourceStream(@"WindowsApplication1.folder.6.jpg");//namespace:WindowsApplication1,folder.6.jpg相对路径+文件名+扩展名
            pictureBox1.Image = Image.FromStream(streamSmall);
运行,睁大眼睛看看什么效果

以后不回答问题了,我靠. --------------------编程问答-------------------- [img=http://][/img][img=sss][/img]http:// --------------------编程问答-------------------- 你添加一个文件,如何操作,你可以设置属性,
属性:"复制到输出目录" -->"更新复制"

这样你就可以在你的程序中直接用你的文件名来设置文件的路径字符串了

比如

string path="123.mp3";

用IO库中的类来处理一般的文件,如果是媒体文件,要播放可以用

System.Media名称空间下面的类来处理 --------------------编程问答-------------------- Assembly assembly = GetType().Assembly;
System.IO.Stream streamSmall = assembly.GetManifestResourceStream("NameSpace.Folder.1.jpg");
--------------------编程问答--------------------
引用 6 楼 mythad 的回复:
1.用到的命名空间:
System.Reflection;

2.用法,将资源读出到Stream流中,然后使用.
Assembly assembly = GetType().Assembly;
System.IO.Stream streamSmall = assembly.GetManifestResourceStream("NameSpace.Folder.1.jpg");

注……


楼主,好搞笑...
其实,第一次回答已经,很清楚了,而且后来还傻瓜式的补充了几次,你居然...
怀疑你的理解能力
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,