webform和winform共用一个文件夹

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了webform和winform共用一个文件夹相关的知识,希望对你有一定的参考价值。

我有两个项目 一个是winform的 一个是webform ,我想让webform调用winform这个项目下的图片 应该怎么办,能不能给一个解决办法?或者还有什么建议,谢谢啦,后面加分

我的理解,你的需求是 webform 要用非web目录下的图片对吗?
如果是的话,这样解决:
写一个 getimage.ashx , 用传入的图片名去读取图片文件,然后用 Response 写给客户端。比如你的图片在 D:\WB\Images, webform 的主目录在别的任意地方。
以下为 getImage.ashx 的代码,把它放到webform根目录下:
<%@ WebHandler Language="C#" Class="ImageLoader" %>
using System;
using System.IO;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
public class ImageLoader : IHttpHandler


protected HttpContext Context = null;
protected HttpRequest Request = null;
protected HttpResponse Response = null;
public void ProcessRequest(HttpContext context)

Context = context;
Request = context.Request ;
Response = context.Response ;
Response.ContentType = "image/gif"; //这里根据你得图片的类型修改
string PhysicalFilePath = @"D:\WB\images\"; //这里改成你实际的路径,也可以存在web.config里面,用的时候去读
string PhysicalFileName = PhysicalFilePath + Request.QueryString["fn"] + ".gif" ; //扩展名也可以在QueryString里面直接传递
string sHeader = string.Format("attachment;filename=0", Request.QueryString["fn"]);
Response.ClearHeaders();
Response.AppendHeader("Content-disposition", sHeader);
if (!File.Exists(PhysicalFileName)) Response.End();
else WriteFile(PhysicalFileName);

protected void WriteFile(string PhysicalFileName)

FileStream fsin = new FileStream(PhysicalFileName, FileMode.Open, FileAccess.Read);
long FileSize = fsin.Length;
byte[] Buffer = new byte[(int)FileSize];
fsin.Read(Buffer, 0, (int)FileSize);
fsin.Close();
Response.BinaryWrite(Buffer);

public bool IsReusable

get

return false;




在 webform 里面要用这个图片,比如用 D:\WB\Images\logo.gif, 只要写
<img src="getImage.ashx?fn=logo" />
就可以了。
参考技术A 占个座 参考技术B 1.把图片copy到web项目
2.图片在使用winform的a客户端,b客户端想使用浏览器调a客户端的图片,只有把图片从a客户端读到服务器,然后传给b客户端
3.如果你即是a又是b。。。

c#读取xml文件配置文件Winform及WebForm-Demo具体解释

我这里用WinformWebForm两种为例说明怎样操作xml文档来作为配置文件进行读取操作。

1.新建一个类,命名为“SystemConfig.cs”。代码例如以下:

<span style="font-family:Microsoft YaHei;font-size:14px;">using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.IO;

namespace ConfigMgrTest
{
    public class SystemConfig
    {
        #region"基本操作函数"
        /// <summary>
        /// 得到程序工作文件夹
        /// </summary>
        /// <returns></returns>
        private static string GetWorkDirectory()
        {
            try
            {
                return Path.GetDirectoryName(typeof(SystemConfig).Assembly.Location);
            }
            catch
            {
                return System.Windows.Forms.Application.StartupPath;
            }
        }
        /// <summary>
        /// 推断字符串是否为空串
        /// </summary>
        /// <param name="szString">目标字符串</param>
        /// <returns>true:为空串;false:非空串</returns>
        private static bool IsEmptyString(string szString)
        {
            if (szString == null)
                return true;
            if (szString.Trim() == string.Empty)
                return true;
            return false;
        }
        /// <summary>
        /// 创建一个制定根节点名的XML文件
        /// </summary>
        /// <param name="szFileName">XML文件</param>
        /// <param name="szRootName">根节点名</param>
        /// <returns>bool</returns>
        private static bool CreateXmlFile(string szFileName, string szRootName)
        {
            if (szFileName == null || szFileName.Trim() == "")
                return false;
            if (szRootName == null || szRootName.Trim() == "")
                return false;

            XmlDocument clsXmlDoc = new XmlDocument();
            clsXmlDoc.AppendChild(clsXmlDoc.CreateXmlDeclaration("1.0", "GBK", null));
            clsXmlDoc.AppendChild(clsXmlDoc.CreateNode(XmlNodeType.Element, szRootName, ""));
            try
            {
                clsXmlDoc.Save(szFileName);
                return true;
            }
            catch
            {
                return false;
            }
        }

        /// <summary>
        /// 从XML文件获取相应的XML文档对象
        /// </summary>
        /// <param name="szXmlFile">XML文件</param>
        /// <returns>XML文档对象</returns>
        private static XmlDocument GetXmlDocument(string szXmlFile)
        {
            if (IsEmptyString(szXmlFile))
                return null;
            if (!File.Exists(szXmlFile))
                return null;
            XmlDocument clsXmlDoc = new XmlDocument();
            try
            {
                clsXmlDoc.Load(szXmlFile);
            }
            catch
            {
                return null;
            }
            return clsXmlDoc;
        }

        /// <summary>
        /// 将XML文档对象保存为XML文件
        /// </summary>
        /// <param name="clsXmlDoc">XML文档对象</param>
        /// <param name="szXmlFile">XML文件</param>
        /// <returns>bool:保存结果</returns>
        private static bool SaveXmlDocument(XmlDocument clsXmlDoc, string szXmlFile)
        {
            if (clsXmlDoc == null)
                return false;
            if (IsEmptyString(szXmlFile))
                return false;
            try
            {
                if (File.Exists(szXmlFile))
                    File.Delete(szXmlFile);
            }
            catch
            {
                return false;
            }
            try
            {
                clsXmlDoc.Save(szXmlFile);
            }
            catch
            {
                return false;
            }
            return true;
        }

        /// <summary>
        /// 获取XPath指向的单一XML节点
        /// </summary>
        /// <param name="clsRootNode">XPath所在的根节点</param>
        /// <param name="szXPath">XPath表达式</param>
        /// <returns>XmlNode</returns>
        private static XmlNode SelectXmlNode(XmlNode clsRootNode, string szXPath)
        {
            if (clsRootNode == null || IsEmptyString(szXPath))
                return null;
            try
            {
                return clsRootNode.SelectSingleNode(szXPath);
            }
            catch
            {
                return null;
            }
        }

        /// <summary>
        /// 获取XPath指向的XML节点集
        /// </summary>
        /// <param name="clsRootNode">XPath所在的根节点</param>
        /// <param name="szXPath">XPath表达式</param>
        /// <returns>XmlNodeList</returns>
        private static XmlNodeList SelectXmlNodes(XmlNode clsRootNode, string szXPath)
        {
            if (clsRootNode == null || IsEmptyString(szXPath))
                return null;
            try
            {
                return clsRootNode.SelectNodes(szXPath);
            }
            catch
            {
                return null;
            }
        }

        /// <summary>
        /// 创建一个XmlNode并加入到文档
        /// </summary>
        /// <param name="clsParentNode">父节点</param>
        /// <param name="szNodeName">结点名称</param>
        /// <returns>XmlNode</returns>
        private static XmlNode CreateXmlNode(XmlNode clsParentNode, string szNodeName)
        {
            try
            {
                XmlDocument clsXmlDoc = null;
                if (clsParentNode.GetType() != typeof(XmlDocument))
                    clsXmlDoc = clsParentNode.OwnerDocument;
                else
                    clsXmlDoc = clsParentNode as XmlDocument;
                XmlNode clsXmlNode = clsXmlDoc.CreateNode(XmlNodeType.Element, szNodeName, string.Empty);
                if (clsParentNode.GetType() == typeof(XmlDocument))
                {
                    clsXmlDoc.LastChild.AppendChild(clsXmlNode);
                }
                else
                {
                    clsParentNode.AppendChild(clsXmlNode);
                }
                return clsXmlNode;
            }
            catch
            {
                return null;
            }
        }

        /// <summary>
        /// 设置指定节点中指定属性的值
        /// </summary>
        /// <param name="parentNode">XML节点</param>
        /// <param name="szAttrName">属性名</param>
        /// <param name="szAttrValue">属性值</param>
        /// <returns>bool</returns>
        private static bool SetXmlAttr(XmlNode clsXmlNode, string szAttrName, string szAttrValue)
        {
            if (clsXmlNode == null)
                return false;
            if (IsEmptyString(szAttrName))
                return false;
            if (IsEmptyString(szAttrValue))
                szAttrValue = string.Empty;
            XmlAttribute clsAttrNode = clsXmlNode.Attributes.GetNamedItem(szAttrName) as XmlAttribute;
            if (clsAttrNode == null)
            {
                XmlDocument clsXmlDoc = clsXmlNode.OwnerDocument;
                if (clsXmlDoc == null)
                    return false;
                clsAttrNode = clsXmlDoc.CreateAttribute(szAttrName);
                clsXmlNode.Attributes.Append(clsAttrNode);
            }
            clsAttrNode.Value = szAttrValue;
            return true;
        }
        #endregion

        #region"配置文件的读取和写入"
        private static string CONFIG_FILE = "SystemConfig.xml";
        /// <summary>
        ///  读取指定的配置文件里指定Key的值
        /// </summary>
        /// <param name="szKeyName">读取的Key名称</param>
        /// <param name="szDefaultValue">指定的Key不存在时,返回的值</param>
        /// <returns>Key值</returns>
        public static int GetConfigData(string szKeyName, int nDefaultValue)
        {
            string szValue = GetConfigData(szKeyName, nDefaultValue.ToString());
            try
            {
                return int.Parse(szValue);
            }
            catch
            {
                return nDefaultValue;
            }
        }

        /// <summary>
        ///  读取指定的配置文件里指定Key的值
        /// </summary>
        /// <param name="szKeyName">读取的Key名称</param>
        /// <param name="szDefaultValue">指定的Key不存在时,返回的值</param>
        /// <returns>Key值</returns>
        public static float GetConfigData(string szKeyName, float fDefaultValue)
        {
            string szValue = GetConfigData(szKeyName, fDefaultValue.ToString());
            try
            {
                return float.Parse(szValue);
            }
            catch
            {
                return fDefaultValue;
            }
        }

        /// <summary>
        ///  读取指定的配置文件里指定Key的值
        /// </summary>
        /// <param name="szKeyName">读取的Key名称</param>
        /// <param name="szDefaultValue">指定的Key不存在时,返回的值</param>
        /// <returns>Key值</returns>
        public static bool GetConfigData(string szKeyName, bool bDefaultValue)
        {
            string szValue = GetConfigData(szKeyName, bDefaultValue.ToString());
            try
            {
                return bool.Parse(szValue);
            }
            catch
            {
                return bDefaultValue;
            }
        }

        /// <summary>
        ///  读取指定的配置文件里指定Key的值
        /// </summary>
        /// <param name="szKeyName">读取的Key名称</param>
        /// <param name="szDefaultValue">指定的Key不存在时,返回的值</param>
        /// <returns>Key值</returns>
        public static string GetConfigData(string szKeyName, string szDefaultValue)
        {
            string szConfigFile = string.Format("{0}\\{1}", GetWorkDirectory(), CONFIG_FILE);
            if (!File.Exists(szConfigFile))
            {
                return szDefaultValue;
            }

            XmlDocument clsXmlDoc = GetXmlDocument(szConfigFile);
            if (clsXmlDoc == null)
                return szDefaultValue;

            string szXPath = string.Format(".//key[@name='{0}']", szKeyName);
            XmlNode clsXmlNode = SelectXmlNode(clsXmlDoc, szXPath);
            if (clsXmlNode == null)
            {
                return szDefaultValue;
            }

            XmlNode clsValueAttr = clsXmlNode.Attributes.GetNamedItem("value");
            if (clsValueAttr == null)
                return szDefaultValue;
            return clsValueAttr.Value;
        }

        /// <summary>
        ///  保存指定Key的值到指定的配置文件里
        /// </summary>
        /// <param name="szKeyName">要被改动值的Key名称</param>
        /// <param name="szValue">新改动的值</param>
        public static bool WriteConfigData(string szKeyName, string szValue)
        {
            string szConfigFile = string.Format("{0}\\{1}", GetWorkDirectory(), CONFIG_FILE);
            if (!File.Exists(szConfigFile))
            {
                if (!CreateXmlFile(szConfigFile, "SystemConfig"))
                    return false;
            }
            XmlDocument clsXmlDoc = GetXmlDocument(szConfigFile);

            string szXPath = string.Format(".//key[@name='{0}']", szKeyName);
            XmlNode clsXmlNode = SelectXmlNode(clsXmlDoc, szXPath);
            if (clsXmlNode == null)
            {
                clsXmlNode = CreateXmlNode(clsXmlDoc, "key");
            }
            if (!SetXmlAttr(clsXmlNode, "name", szKeyName))
                return false;
            if (!SetXmlAttr(clsXmlNode, "value", szValue))
                return false;
            //
            return SaveXmlDocument(clsXmlDoc, szConfigFile);
        }
        #endregion
    }
}
</span>

PS:假设是Winform,则不用改动SystemConfig.cs的代码,假设是WebForm的话则需改动后面的路径和写入与读取的代码。将我标红框的删除就可以,如图:

技术分享技术分享


2.WinForm的界面例如以下:

技术分享

cs代码例如以下:

<pre name="code" class="csharp"><span style="font-family:Microsoft YaHei;font-size:14px;">using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace ConfigMgrTest
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }

        private void btnSave_Click(object sender, EventArgs e)
        {          
            //保存
            SystemConfig.WriteConfigData("UserID", this.txtUserID.Text.Trim());
            SystemConfig.WriteConfigData("Password", this.txtPassword.Text.Trim());
            SystemConfig.WriteConfigData("Birthday",this.textBox3.Text.Trim());

            this.txtUserID.Text = null;
            this.txtPassword.Text = null;
            this.textBox3.Text = null;
            MessageBox.Show("成功保存到配置文件" + Application.StartupPath + "SystemConfig.xml \n点击读取button进行读取!");
        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            //读取
            this.txtUserID.Text = SystemConfig.GetConfigData("UserID", string.Empty);
            this.txtPassword.Text = SystemConfig.GetConfigData("Password", string.Empty);
            this.textBox3.Text = SystemConfig.GetConfigData("Birthday", string.Empty);
        }

    }
}</span>



3.WebForm效果例如以下:

技术分享

前台代码例如以下:

<span style="font-family:Microsoft YaHei;font-size:14px;"><%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="Tc.Web.WebForm1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>    
        <asp:Label ID="Label1" runat="server" Text="url1:"></asp:Label>
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
      
    <p>
        <asp:Label ID="Label2" runat="server" Text="url2:"></asp:Label>
        <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
    </p>
    <asp:Button ID="Button1" runat="server" Text="写入" onclick="Button1_Click" />
    <asp:Button ID="Button2" runat="server" Text="读取" onclick="Button2_Click" />
    </form>  
    </div>
</body>
</html>
</span>

后台代码例如以下:

<span style="font-family:Microsoft YaHei;font-size:14px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Tc.Web._Code;

namespace Tc.Web
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
           
      
        }

        protected void Button2_Click(object sender, EventArgs e)
        {
            //读取
            this.TextBox1.Text = SystemConfig.GetConfigData("url1", string.Empty);
            this.TextBox2.Text = SystemConfig.GetConfigData("url2", string.Empty);           
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            //写入
            SystemConfig.WriteConfigData("url1", this.TextBox1.Text.Trim());
            SystemConfig.WriteConfigData("url2", this.TextBox2.Text.Trim());
            this.TextBox1.Text = null;
            this.TextBox2.Text = null;
        }
    }
}</span>

终于xml文档效果如图:

技术分享

PS:这里顺便给大家推荐一款软件,名字叫“ FirstObject XML Editor”

FirstObject XML Editor是一个颇具特色的XML编辑器。该编辑器对中文的支持良好。能够快速载入XML文档,并生成可自己定义的树视图以显示 XML 文档的数据结构(很有特色。为其它 XML 编辑器所无)。能够调用 MSXML 分析引擎验证 XML 文档的正确性和有效性。

其独特的 FOAL 语言还能够用于编程处理 XML 文档,这也是一般的 XML 编辑器所无的。 
FirstObject XML Editor除了支持一般的 XML 编辑功能之外,还具有生成 XML 节点相应的 XPath 定位表达式、获取所选文字的 Unicode 代码、对 XML 代码进行自己主动缩进排版以便阅读等特殊功能。推荐各位 XML 爱好者尝试本编辑器。

并且,这是一个免费的软件,你能够一直使用它。如图所看到的:

技术分享

技术分享

PS:“FirstObject XML Editor”及WinForm之xml读取配置文件Demo下载地址:http://115.com/lb/5lbdzr1o4qf1

         115网盘礼包码:5lbdzr1o4qf1

















以上是关于webform和winform共用一个文件夹的主要内容,如果未能解决你的问题,请参考以下文章

C#如何将PDF内容显示在webform中

webbrowser 控件实现WinForm与WebForm交互

winform 怎么实现像webform的母版页的效果

WebForm和WinForm同在服务端,如何通讯、交换数据、传参数。

C# - 在 C# winform/webform 中是不是有类似 jquery handle classhtml 的东西?

C# winform 如何引用webservices