我可以在 C# 中使用 File.Open 打开资源路径吗

Can I open a resourcepath with File.Open in C#

我尝试使用此行在 C# 中打开资源文件,但我不明白为什么这不起作用。我曾尝试使用 build action = "embedded resource" 和 "none"。 我已经尝试了所有复制到输出目录的方法。 我是否需要一些特殊的方法来使用 c# 将资源文件打开到 fileStream?

    public bool openFileStream()
    {
        FileStream mFileStream;
        String[] s=System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceNames();
        String mFilename =null;
        for (int i = 0; i < s.Length;i++ )
        {
            s[i] = s[i].Replace(".", "\");

            if (s[i].Contains("sju_tre_g_i"))
            {
                s[i] = s[i].Substring(0, s[i].Length - 4);
                s[i] = s[i] + ".wav";
                mFilename = s[i];

            }
            System.Diagnostics.Debug.WriteLine(i + "___Outputname:" + mFilename);
        }
        System.Diagnostics.Debug.WriteLine(mFilename);
        try{
            mFileStream = File.Open(mFilename,FileMode.Open );
            return true;
        }
        catch(Exception)
        {
            return false;
        }
    }

EDIT 不重复 在副本中只是打开一个文本文件。用于FileStream mFileStream的地址; mFileStream=File.Open("WindowsFormsApplication2\Resources\‌​sju_tre_g_i.wav",Fil‌ eMode.Open );

如果你想从资源中打开一个 wav 文件,你可以这样做。

using (var steam = Properties.Resources.sju_tre_g_i)
{
     // do something       
}

请注意,这不是 FileStream,而是 UnmanagedMemoryStream。 (但是无论如何资源库都被加载到内存中,它应该没有什么区别吗?)


如果你想确保一个目录存在,并且你想在文件存在时打开文件,在文件不存在时创建它,你可以执行以下操作。

var path = @"C:\mypath\myfile.txt";
Directory.CreateDirectory(path);
using (var stream = File.Open(path, FileMode.OpenOrCreate))
{
     // do something            
}

您也可以根据需要使用相对路径。