WINFORM访问项目内文件夹

WINFORM访问项目内文件夹,第1张

C#中可以使用ApplicationStartupPath来获取你生成的exe所在的文件夹,在Debug配置时,它是指bin\debug文件夹,在Release配置时,它是指bin\Release。所以,其他所有的文件夹都可以以此为参照得到,包括你的Image文件夹。但是,这再给你提一个建议,因为程序一旦完成,交付给别人使用时是不会给别人源代码的,所以Image文件夹放在你的项目下不太合适,建议还是放在与exe相同的文件夹下,这样你交付给别人时的文件夹配置要求与你开发时的配置要求可以保持一致。

/// <summary>

///method:修改config文件

/// </summary>

/// <param name="AppKey"></param>

/// <param name="AppValue"></param>

public static void SetValue(string AppKey, string AppValue)

{

XmlDocument xDoc = new XmlDocument();

//获取可执行文件的路径和名称

xDocLoad(SystemWindowsFormsApplicationExecutablePath + "config");

XmlNode xNode;

XmlElement xElem1;

XmlElement xElem2;

xNode = xDocSelectSingleNode("//appSettings");

xElem1 = (XmlElement)xNodeSelectSingleNode("//add[@key='" + AppKey + "']");

if (xElem1 != null) xElem1SetAttribute("value", AppValue);

else

{

xElem2 = xDocCreateElement("add");

xElem2SetAttribute("key", AppKey);

xElem2SetAttribute("value", AppValue);

xNodeAppendChild(xElem2);

}

xDocSave(SystemWindowsFormsApplicationExecutablePath + "config");

}

你没有理解项目和程序的区别。

实际运行的程序是没有所谓项目的概念的(不可能把源代码也复制过去吧?!),也就是说,你的应用程序运行时的目录下一开始是不会自动地产生ClientPhoto这个文件夹的(除非你在项目里将这个文件夹中的文件设置为“复制到输出目录”。)

所以你要做的,第一件事就是先获取应用程序的路径,然后判断这个路径下的目录存在不存在,如果不存在,要首先创建一个。

我们知道“ClientPhoto”其实只是一个相对路径而已,要获得绝对路径,首先要知道应用程序当前的绝对路径:只需要检索SystemWindowsFormsApplicationStartupPath这个属性即可。

string path = SystemWindowsFormsApplicationStartupPath;

然后将应用程序当前路径path和字符串“ClientPhoto”组合成为一个完整的文件夹绝对路径folder(这时候就是绝对路径了,但是,还没完!)。

string folder = SystemIOPathCombine(path, "ClientPhoto");

接着判断 folder 指定的文件夹是否存在。

bool folderExists = SystemIODirectoryExists(folder);

如果文件夹不存在,则创建它。如果创建不了,会引发异常,请自行捕捉这个异常。

if(!folderExists)

{

    SystemIODirectoryCreateDirectory(folder);

}

最后才返回路径 folder。

完整代码:

private string GetFolderPath()

{

    string folder = PathCombine(ApplicationStartupPath, "ClientPhoto");

    if(!DirectoryExists(folder))

    {

        DirectoryCreateDirectory(folder);

    }

    return folder;

}

1、新建winform项目用于测试comboBox。

2、新建完成的项目结构。

3、在Form1窗体中添加一个comboBox,编译,运行效果如下。

4、点击comboBox,右键选择属性,找到items项,在d出的字符串集合编辑器中输入模拟项1到10。

5、加入模拟值后的运行效果如下,下拉显示了所有的10个项,没有滚动条。

6、再次找到comboBox,设置如下两项:IntegralHeight:false;MaxLength:3。

7、运行效果如下,下拉只显示3项,超过的滚动条展示。

先解释你遇到的两个问题。

问题一:链接库项目的appconfig文件默认是不会复制到引用者的输出目录的。即使你在A项目中修改appconfig的属性“复制到输出目录”为始终复制或者较新复制,在A项目的输出中会有预期的appconfig和Adllconfig,但是在main的输出目录只会有appconfig而没有Adllconfig。请手动复制。

问题二:VS自身没有智能拼接多个配置文件的功能,而且ConfigurationManager指向的是默认的应用程序配置文件而非你拷贝过去的Adllconfig,所以你这样是取不到值的。要想读取Adllconfig,请使用如下代码手动加载配置文件:

Configuration config = ConfigurationManagerOpenExeConfiguration("Adllconfig");

然后可以使用configAppSettings[""]读取。

关于你的预期目标,我个人的建议是如果只存本地化数据的话,不要使用配置文件,你可以选用Settings绑定,或者自写Xml都可以在外部进行更改同时又能直接作为“内容”生成到输出目录。

如果你的链接库本身就逃不开config文件,那就只好动手复制一下了。

如有疑问请追问。希望能帮到你。

通过修改Main方法中的 ApplicationRun(……)语句,设置默认的启动窗体。Main方法在Programcs文件中。

例如,以下代码将Form2作为启动窗体

using System;

using SystemWindowsForms;

namespace WindowsFormsApplication1

{

    static class Program

    {

        /// <summary>

        /// 应用程序的主入口点。

        /// </summary>

        [STAThread]

        static void Main()

        {

            ApplicationEnableVisualStyles();

            ApplicationSetCompatibleTextRenderingDefault(false);

            // 用Form2作为启动窗体

            ApplicationRun(new Form2());

        }

    }

}

以上就是关于WINFORM访问项目内文件夹全部的内容,包括:WINFORM访问项目内文件夹、winform项目中app.config读取修改、C# 获取项目下文件夹路径等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9657248.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存