资源C#中的访问文件

时间:2014-11-11 11:15:02

标签: c# file resources registry embedded-resource

我想导入registry中存在的project resources .reg文件。

导入reg文件的方法使用reg文件的路径:

Process proc = new Process();  
proc = Process.Start("regedit.exe", "/s " + "path\to\file.reg"); 

是否可以使用资源中的文件执行此操作?我如何得到它的路径?

3 个答案:

答案 0 :(得分:0)

如果它在项目文件夹中。 I-E。项目运行的文件夹。您可以直接访问它:Process.Start("regedit.exe", "/s " + "Filename.reg");

您可以使用

获取当前路径
string path =System.AppDomain.CurrentDomain.BaseDirectory; // this will give u the path for debug folder

string projectPath= Path.GetDirectoryName(Path.GetDirectoryName(System.IO.Directory.GetCurrentDirectory())); //This will give u the project path.

您可以同时使用两者并导航arround以获取所需文件夹的路径。例如,如果要访问项目文件夹内Resource文件夹中的文件,则可以使用projectPath+"\\Resource\\filename.reg"

答案 1 :(得分:0)

如果文件是嵌入式资源(并且因此未在磁盘上创建),最好将其读取like this并使用以下命令将其保存到临时文件中:

var path = System.IO.Path.ChangeExtension(System.IO.Path.GetTempFileName(), "reg");
Process.Start(path);

如果您不直接启动文件,但可能没有必要更改扩展名,但请使用问题中描述的Process.Start("regedit", "/s " + path)。请记住,文件路径应该被转义,因此它可以正确解析,因为命令行参数,临时文件路径,不会包含空格,所以它应该没问题。

答案 2 :(得分:0)

这不是经过测试的代码,但是你得到了我希望的步骤:

Process proc = new Process();

proc.StartInfo.FileName = "regedit.exe";
proc.StartInfo.Arguments = "/s";
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardInput = true;
proc.Start();

StreamWriter stdin = myProcess.StandardInput;

var assembly = Assembly.GetExecutingAssembly();
var resourceName = "<regfile>";

using (Stream stream = assembly.GetManifestResourceStream(resourceName))
using (StreamReader reader = new StreamReader(stream))
{
    stdin.Write(reader.ReadToEnd());
}