Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在安装应用程序的文件夹内创建文件夹和文件?c#_C# - Fatal编程技术网

如何在安装应用程序的文件夹内创建文件夹和文件?c#

如何在安装应用程序的文件夹内创建文件夹和文件?c#,c#,C#,我想能够在安装应用程序的文件夹内设置默认文件夹和文件创建?因为此应用程序将在多台机器上使用,所以我无法指定路径,如C://Users/PcName/etc.有什么非常简单的方法吗?您可以使用此代码获取可执行文件的路径(大多数情况下,实际上它返回当前工作目录) 您可以使用此代码获取可执行文件的路径(大多数情况下,实际上它返回当前工作目录) 这适用于web和windows应用程序: Environment.CurrentDirectory = AppDomain.CurrentDomain.Base

我想能够在安装应用程序的文件夹内设置默认文件夹和文件创建?因为此应用程序将在多台机器上使用,所以我无法指定路径,如
C://Users/PcName/etc.
有什么非常简单的方法吗?

您可以使用此代码获取可执行文件的路径(大多数情况下,实际上它返回当前工作目录)


您可以使用此代码获取可执行文件的路径(大多数情况下,实际上它返回当前工作目录)


这适用于web和windows应用程序:

Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory;

这适用于web和windows应用程序:

Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory;

如果只指定一个不以驱动器号开头的路径,则该路径将与应用程序运行的位置相关。e、 g.以下程序将在应用程序的本地文件夹中创建文件夹和文件

类程序
{
静态void Main(字符串[]参数)
{
var installedLocation=Directory.GetParent(Assembly.getExecutionGassembly().Location);
var di=installedLocation.CreateSubdirectory(“MyFolder”);
File.WriteAllText(Path.Combine(di.FullName,“File.txt”),“这将写入文件”);
var installedPath=AppDomain.CurrentDomain.BaseDirectory;
var di2=Directory.CreateDirectory(Path.Combine(installedPath,“MyFolder2”);
File.WriteAllText(Path.Combine(di.FullName,“File2.txt”),“这将写入文件”);
}
}

如果您只指定一个不以驱动器号开头的路径,则该路径将与应用程序运行的位置相关。e、 g.以下程序将在应用程序的本地文件夹中创建文件夹和文件

类程序
{
静态void Main(字符串[]参数)
{
var installedLocation=Directory.GetParent(Assembly.getExecutionGassembly().Location);
var di=installedLocation.CreateSubdirectory(“MyFolder”);
File.WriteAllText(Path.Combine(di.FullName,“File.txt”),“这将写入文件”);
var installedPath=AppDomain.CurrentDomain.BaseDirectory;
var di2=Directory.CreateDirectory(Path.Combine(installedPath,“MyFolder2”);
File.WriteAllText(Path.Combine(di.FullName,“File2.txt”),“这将写入文件”);
}
}

你试图做的是不可取的;如果您的应用程序是使用推荐的默认方法安装的(遵循Microsoft指南),则应用程序将位于
C:\Program Files
下的目录中(或程序文件文件夹可能被重定向的位置),运行应用程序的用户将无权对该目录进行写入访问,因此,目录创建将失败

也就是说,您不能使用
环境.CurrentDirectory
,因为它可能是也可能不是应用程序可执行文件所在的目录,也可能不是
CurrentDomain.BaseDirectory
,因为这也没有意义(文档说明它是加载程序将搜索程序集的目录,但它可能是应用程序可执行文件的目录,也可能不是)

从其他答案复制,找到程序集目录的正确方法是

public static string AssemblyDirectory
{
    get
    {
        string codeBase = Assembly.GetExecutingAssembly().CodeBase;
        UriBuilder uri = new UriBuilder(codeBase);
        string path = Uri.UnescapeDataString(uri.Path);
        return Path.GetDirectoryName(path);
    }
}
获得路径后,可以尝试使用
System.IO.directory.CreateDirectory()
创建目录,并使用
System.IO.file.writealText()
或其同级创建文件,或者使用任何其他标准创建文件的方法


您可能还希望使用较新的
Assembly.getExecutionGassembly().Location
属性,并在该属性上使用
Path.GetDirectoryName()

如果您的应用程序是使用推荐的默认方法安装的(遵循Microsoft指南),则不建议您尝试这样做应用程序将位于
C:\Program Files
下的目录中(或程序文件文件夹可能被重定向的位置),运行应用程序的用户将无权写入该目录,因此目录创建将失败

也就是说,您不能使用
环境.CurrentDirectory
,因为它可能是也可能不是应用程序可执行文件所在的目录,也可能不是
CurrentDomain.BaseDirectory
,因为这也没有意义(文档说明它是加载程序将搜索程序集的目录,但它可能是应用程序可执行文件的目录,也可能不是)

从其他答案复制,找到程序集目录的正确方法是

public static string AssemblyDirectory
{
    get
    {
        string codeBase = Assembly.GetExecutingAssembly().CodeBase;
        UriBuilder uri = new UriBuilder(codeBase);
        string path = Uri.UnescapeDataString(uri.Path);
        return Path.GetDirectoryName(path);
    }
}
获得路径后,可以尝试使用
System.IO.directory.CreateDirectory()
创建目录,并使用
System.IO.file.writealText()
或其同级创建文件,或者使用任何其他标准创建文件的方法


您可能还想使用较新的
Assembly.getExecutionGassembly().Location
属性,并在该属性上使用
Path.GetDirectoryName()

使用ASESSSMBLY Location获取路径迄今为止您做了哪些尝试?没有人会实现您的应用程序。但我们期待着帮助您:).我刚创建了我的路径,包括我的电脑名。但现在我必须更改它,我只是想知道是否有一些非常简单的方法可以做到这一点,Candide为我的问题提供了解决方案,我只需要再等5分钟,将其标记为正确答案:))您可以从Environment.GetFolderPath(Environment.SpecialFolders.desktop)获取当前用户的桌面。不要试图构建路径,它可能不是您期望的路径,请询问系统。@Mystia我建议您测试Alex的方法,并将其标记为正确答案,因为这似乎是更好的解决方案。使用asessmbly Location获取路径到目前为止,您尝试了什么?没有人会实现你的应用程序。但我们期待着帮助你:)。我刚刚有了我的路径,包括我的电脑名si