读取嵌入的资源文件

解析资源加载与文件流操作

              var ass = Assembly.Load("cn.fstudio.me.report");
                var names = ass.GetManifestResourceInfo("cn.fstudio.me.report.Alarm.rdlc");
                using (var stream = ass.GetManifestResourceStream("cn.fstudio.me.report.Alarm.rdlc"))
                {
                    StreamReader sr = new StreamReader(stream);
                    var xml= sr.ReadToEnd();
                    sr.Close();
                }
                //using (var ms = new MemoryStream())
                //{
                //    Stream stream=   ass.GetManifestResourceStream("cn.fstudio.me.report.Alarm.rdlc");
                //    byte[] buffer=new byte[1024];
                //    int readLen=stream.Read(buffer,0,buffer.Length);
                //    while(readLen>0){
                //        ms.Write(buffer, 0, readLen);
                //        readLen = stream.Read(buffer, 0, buffer.Length);
                //    }
                //    stream.Close();

                //    //ms.Seek(0, SeekOrigin.Begin);
                //    ms.Position = 0;
                //    StreamReader sr = new StreamReader(ms, Encoding.UTF8);
                //    var xml= sr.ReadToEnd();
                //    sr.Close();
                //}

在 Linux 下使用 Intel 编译器编译 Fortran 代码,调用 C++ 接口读取嵌入资源文件里面的文件,可以按照以下的步骤进行: 1. 编写 C++ 接口函数,用于读取嵌入资源文件里的文件。这个函数可以使用标准的 C++ 文件读写 API,也可以使用操作系统提供的 API,例如 Linux 下的 `fread()` 和 `fseek()` 等函数。 2. 编译 C++ 接口函数成动态链接库(DLL)。可以使用 Intel 编译器编译 C++ 代码,并将其编译成动态链接库。例如: ``` icpc -shared -fPIC -o libreadfile.so readfile.cpp ``` 这个命令将 C++ 代码 `readfile.cpp` 编译成动态链接库 `libreadfile.so`,其中 `-shared` 选项表示编译成共享库,`-fPIC` 选项表示生成位置无关代码。 3. 将要嵌入的文件转换成 C 数组,并在 Fortran 代码中声明。可以使用 `xxd` 工具将文件转换成 C 数组,例如: ``` xxd -i test.dat > test_dat.h ``` 这个命令将二进制文件 `test.dat` 转换成 C 数组,并存储到头文件 `test_dat.h` 中。 在 Fortran 代码中,可以使用 `external` 关键字声明这个 C 数组,例如: ```fortran program main use iso_c_binding implicit none interface subroutine read_file(cfilename, data, size) bind(C) import :: C_CHAR, C_INT, C_PTR character(kind=C_CHAR), dimension(*), intent(in) :: cfilename type(C_PTR), intent(out) :: data integer(kind=C_INT), intent(out) :: size end subroutine read_file end interface character(len=100) :: filename = "test.dat" integer(kind=c_int) :: size type(c_ptr) :: data external read_file ! 调用 C++ 接口函数,读取嵌入的文件 call read_file(c_char_array(filename), data, size) ! 将 C 数组转换成 Fortran 数组 real, dimension(size) :: file_data call c_f_pointer(data, file_data) ! 处理文件数据 ... end program main ``` 这个 Fortran 代码中声明了一个名为 `read_file` 的 C++ 接口函数,并在程序中调用它。`read_file` 函数接受一个字符串参数 `cfilename`,表示要读取的文件名,以及两个输出参数 `data` 和 `size`,分别表示文件的数据和大小。在程序中,使用 `external` 关键字将 `read_file` 函数声明为外部函数,并使用 `call` 语句调用它。最后,将 `data` 转换成 Fortran 数组,并进行处理。 4. 在链接器中链接 C++ 接口函数和 Fortran 代码。可以使用下面的命令将 Fortran 代码和 C++ 接口函数链接成可执行文件: ``` ifort -o myprog main.f90 -L. -lreadfile ``` 这个命令将 Fortran 代码 `main.f90` 和动态链接库 `libreadfile.so` 链接成可执行文件 `myprog`,其中 `-L.` 选项表示链接器要在当前目录查找动态链接库,`-lreadfile` 选项表示链接器要链接动态链接库 `libreadfile.so`。 这样,就可以在 Fortran 代码中调用 C++ 接口函数,读取嵌入资源文件里面的文件了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值