c#winform 利用OpenFileDialog打开文件控件找到一个文件然后保存到指定文件夹

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#winform 利用OpenFileDialog打开文件控件找到一个文件然后保存到指定文件夹相关的知识,希望对你有一定的参考价值。

private void button1_Click(object sender, EventArgs e)

OpenFileDialog f1 = new OpenFileDialog();
f1.Title = "文件上传";
f1.Filter="All Files|*.*|课件(*.ppt)|*.ppt|教学大纲和授课计划(*.doc)|*.doc";
f1.ShowDialog();
if (f1.ShowDialog() == DialogResult.OK)

// string filename = f1.FileName;
string filepath = System.IO.Path.GetDirectoryName(f1.FileName);
string path1 = @"D:\23";
File.Copy(filepath, path1);

OpenFileDialog 一般为文件打开所用,用 OpenFileDialog 保存文件不怎么好吧

SaveFileDialog 一般为文件保存所用追问

本来是要求实现上传的,我现在是想通过openfiledialog打开文件目录然后点击打开那个按钮将选中的文件复制到指定文件夹,能实现吗?或者还有什么更好的方法

追答//用 OpenFileDialog 可以实现的,如下面代码
private void button1_Click(object sender, EventArgs e)

    OpenFileDialog f1 = new OpenFileDialog();
    f1.Title = "文件上传";
    f1.Filter = "All Files|*.*|课件(*.ppt)|*.ppt|教学大纲和授课计划(*.doc)|*.doc";
    if (f1.ShowDialog() == DialogResult.OK)
    
        FileInfo fileInfo = new FileInfo(f1.FileName);
        string path1 = @"d:\\";
        File.Copy(f1.FileName, path1+fileInfo.Name);
    

追问

先谢了,肯定采纳,还有一点小问题,我想将一个名为23.txt的文件复制到D:\新建文件夹 ,可是现在都在d盘生成一个新建文件夹23.txt文件,具体修改哪里,求教 string path1 = @"D:\新建文件夹";

追答

你是说现在存在 D:\新建文件夹\23.txt 这样一个文件,然后你想再从其他路径考一个 23.txt 文件到 D:\新建文件夹\ 吗?
如果是的话可以直接覆盖旧文件的,用下面语句就好了

File.Copy(f1.FileName, path1 + fileInfo.Name, true);

追问

不是,现在我有个D:\新建文件夹,我是想将23.txt复制到这个文件夹中,刚才的代码不知是不是 File.Copy(f1.FileName, path1+fileInfo.Name);这条语句有问题,运行后在D盘生了一个名为新建文件夹23.txt的文件。

追答string path1 = @"D:\\23\\";//你这里少了斜杠了
File.Copy(f1.FileName, path1+fileInfo.Name);

参考技术A f1.ShowDialog();
if (f1.ShowDialog() == DialogResult.OK)

这两句话你可以试想一下,应该会打开两次文件选择框的,所以第一句你可以删除了,第二句在打开的时候判断一下就可以了。

然后再纠正一下,f1.FileName拿到的就是全路径,如果你用Path.GetDirectoryName,这样拿到的是文件的目录名称。

其次再纠正一下File.Copy()的两个参数要的是全路径,你缺给了两个目录,我猜想你是会报错的。追问

谢了,这些也对我帮助很大

参考技术B openfiledialog的使用
1、 OpenFileDialog控件有以下基本属性
InitialDirectory 对话框的初始目录
Filter 要在对话框中显示的文件筛选器,例如,"文本文件(*.txt)|*.txt|所有文件(*.*)||*.*"
FilterIndex 在对话框中选择的文件筛选器的索引,如果选第一项就设为1
RestoreDirectory 控制对话框在关闭之前是否恢复当前目录
FileName 第一个在对话框中显示的文件或最后一个选取的文件
Title 将显示在对话框标题栏中的字符
AddExtension 是否自动添加默认扩展名
CheckPathExists
在对话框返回之前,检查指定路径是否存在
DefaultExt 默认扩展名
DereferenceLinks 在从对话框返回前是否取消引用快捷方式
ShowHelp
启用"帮助"按钮
ValiDateNames 控制对话框检查文件名中是否不含有无效的字符或序列

2、 OpenFileDialog控件有以下常用事件
FileOk 当用户点击"打开"或"保存"按钮时要处理的事件
HelpRequest 当用户点击"帮助"按钮时要处理的事件

可以用以下代码来实现上面这个对话框:
private void openFileDialogBTN_Click(object sender, System.EventArgs e)
OpenFileDialog openFileDialog=new OpenFileDialog();
openFileDialog.InitialDirectory="c:\\";//注意这里写路径时要用c:\\而不是c:\
openFileDialog.Filter="文本文件|*.*|C#文件|*.cs|所有文件|*.*";
openFileDialog.RestoreDirectory=true;
openFileDialog.FilterIndex=1;
if (openFileDialog.ShowDialog()==DialogResult.OK)

fName=openFileDialog.FileName;
File fileOpen=new File(fName);
isFileHaveName=true;
richTextBox1.Text=fileOpen.ReadFile();
richTextBox1.AppendText("");


  路径的返回用filename是字符串类型
如:openFileDialog1.ShowDialog();
_name1= openFileDialog1.FileName;
Image imge = Image.FromFile(_name1);

利用C# Winform做Windows系统任务栏

最近公司做一个考试系统,需要一个答题栏,要求:占用屏幕上方一部分区域,而且始终置顶,当其他窗口最大化时“答题栏”始终置前并且不遮挡最大化窗口的任何部分!就像windows任务栏一样。

最终效果图如下:

image

首先,我们必须声明所需的结构和常量。

我们声明RECT WINAPI结构如下:

[StructLayout(LayoutKind.Sequential)]
struct RECT
{
    public int left;
    public int top;
    public int right;
    public int bottom;
}

我们声明APPBARDATA SHELLAPI结构如下:

[StructLayout(LayoutKind.Sequential)]
struct APPBARDATA
{
    public int cbSize;
    public IntPtr hWnd;
    public int uCallbackMessage;
    public int uEdge;
    public RECT rc;
    public IntPtr lParam;
}

然后,我们声明AppBar用到的常量如下:

enum ABMsg : int
{
    ABM_NEW=0,
    ABM_REMOVE,
    ABM_QUERYPOS,
    ABM_SETPOS,
    ABM_GETSTATE,
    ABM_GETTASKBARPOS,
    ABM_ACTIVATE,
    ABM_GETAUTOHIDEBAR,
    ABM_SETAUTOHIDEBAR,
    ABM_WINDOWPOSCHANGED,
    ABM_SETSTATE
}
enum ABNotify : int
{
    ABN_STATECHANGE=0,
    ABN_POSCHANGED,
    ABN_FULLSCREENAPP,
    ABN_WINDOWARRANGE
}
enum ABEdge : int
{
    ABE_LEFT=0,
    ABE_TOP,
    ABE_RIGHT,
    ABE_BOTTOM
}

接下来,我们声明需要用到的WIN32和SHELL API接口:

[DllImport("SHELL32", CallingConvention = CallingConvention.StdCall)]
static extern uint SHAppBarMessage(int dwMessage, ref APPBARDATA pData);
[DllImport("USER32")]
static extern int GetSystemMetrics(int Index);
[DllImport("User32.dll", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)]
static extern bool MoveWindow(IntPtr hWnd, int x, int y, int cx, int cy, bool repaint);
[DllImport("User32.dll", CharSet = CharSet.Auto)]
static extern int RegisterWindowMessage(string msg);

下一步,我们创建一个注册AppBar的方法。

private void RegisterBar()
{
    APPBARDATA abd = new APPBARDATA();
    abd.cbSize = Marshal.SizeOf(abd);
    abd.hWnd = this.Handle;
    if (!fBarRegistered)
    {
        uCallBack = RegisterWindowMessage("AppBarMessage");
        abd.uCallbackMessage = uCallBack;

        uint ret = SHAppBarMessage((int)ABMsg.ABM_NEW, ref abd);
        fBarRegistered = true;

        ABSetPos();
    }
    else
    {
        SHAppBarMessage((int)ABMsg.ABM_REMOVE, ref abd);
        fBarRegistered = false;
    }
}

最后,我们创建一个设置AppBar位置的方法。

private void ABSetPos()
{
    APPBARDATA abd = new APPBARDATA();
    abd.cbSize = Marshal.SizeOf(abd);
    abd.hWnd = this.Handle;
    abd.uEdge = (int)ABEdge.ABE_TOP;

    if (abd.uEdge == (int)ABEdge.ABE_LEFT || abd.uEdge == (int)ABEdge.ABE_RIGHT)
    {
        abd.rc.top = 0;
        abd.rc.bottom = SystemInformation.PrimaryMonitorSize.Height;
        if (abd.uEdge == (int)ABEdge.ABE_LEFT)
        {
            abd.rc.left = 0;
            abd.rc.right = Size.Width;
        }
        else
        {
            abd.rc.right = SystemInformation.PrimaryMonitorSize.Width;
            abd.rc.left = abd.rc.right - Size.Width;
        }

    }
    else
    {
        abd.rc.left = 0;
        abd.rc.right = SystemInformation.PrimaryMonitorSize.Width;
        if (abd.uEdge == (int)ABEdge.ABE_TOP)
        {
            abd.rc.top = 0;
            abd.rc.bottom = Size.Height;
        }
        else
        {
            abd.rc.bottom = SystemInformation.PrimaryMonitorSize.Height;
            abd.rc.top = abd.rc.bottom - Size.Height;
        }
    }

    // Query the system for an approved size and position. 
    SHAppBarMessage((int)ABMsg.ABM_QUERYPOS, ref abd);

    // Adjust the rectangle, depending on the edge to which the 
    // appbar is anchored. 
    switch (abd.uEdge)
    {
        case (int)ABEdge.ABE_LEFT:
            abd.rc.right = abd.rc.left + Size.Width;
            break;
        case (int)ABEdge.ABE_RIGHT:
            abd.rc.left = abd.rc.right - Size.Width;
            break;
        case (int)ABEdge.ABE_TOP:
            abd.rc.bottom = abd.rc.top + Size.Height;
            break;
        case (int)ABEdge.ABE_BOTTOM:
            abd.rc.top = abd.rc.bottom - Size.Height;
            break;
    }

    // Pass the final bounding rectangle to the system. 
    SHAppBarMessage((int)ABMsg.ABM_SETPOS, ref abd);

    // Move and size the appbar so that it conforms to the 
    // bounding rectangle passed to the system. 
    MoveWindow(abd.hWnd, abd.rc.left, abd.rc.top,
        abd.rc.right - abd.rc.left, abd.rc.bottom - abd.rc.top, true);
}

 

参考地址:http://www.codeproject.com/Articles/6741/AppBar-using-C

下载地址:http://pan.baidu.com/s/1qY4HX2c  b7nv

以上是关于c#winform 利用OpenFileDialog打开文件控件找到一个文件然后保存到指定文件夹的主要内容,如果未能解决你的问题,请参考以下文章

c#winform怎么在picturebox中绘制点线面

c#winform多线程

C#winform控件动态添加和动态移除

C#-WinForm-Treeview-树状模型

OpenFileDialog的简单使用

连接到 SQL Server 数据库 C#-WinForms