Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.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#_Wpf_Openfiledialog - Fatal编程技术网

C# 找不到目录

C# 找不到目录,c#,wpf,openfiledialog,C#,Wpf,Openfiledialog,我最近开始遇到一个错误,说明找不到我的目录。我尝试了很多方法来解决这个问题,但还没有找到解决方案 该方法应允许用户为其计算机选择图像,并将其添加到应用程序文件夹结构中名为“图像”的文件夹中。问题是使用File.copyimageFilename时,路径;它抛出了错误。我已经尝试过改变路径,你会看到从代码剪断它。当程序本身已经传递了应用程序的文件路径并且仍然向我抛出错误时,它甚至正在这样做 这就是方法 private void btnImageUpload_Click(object sen

我最近开始遇到一个错误,说明找不到我的目录。我尝试了很多方法来解决这个问题,但还没有找到解决方案

该方法应允许用户为其计算机选择图像,并将其添加到应用程序文件夹结构中名为“图像”的文件夹中。问题是使用File.copyimageFilename时,路径;它抛出了错误。我已经尝试过改变路径,你会看到从代码剪断它。当程序本身已经传递了应用程序的文件路径并且仍然向我抛出错误时,它甚至正在这样做

这就是方法

    private void btnImageUpload_Click(object sender, RoutedEventArgs e)
    {
        OpenFileDialog imageFile = new OpenFileDialog();
        imageFile.InitialDirectory = @"C:\";
        imageFile.Filter = "Image Files (*.jpg)|*.jpg|All Files(*.*)|*.*";
        imageFile.FilterIndex = 1;

        if (imageFile.ShowDialog() == true)
        {
            if(imageFile.CheckFileExists)
            {
                string path = AppDomain.CurrentDomain.BaseDirectory;
                System.IO.File.Copy(imageFile.FileName, path);
            }
        }
    }
我使用的是VS2013,其中包括使用Microsoft.win32的

如需进一步信息,请咨询


谢谢

我不确定这是否是问题所在,但是File.Copy方法需要源文件名和目标文件名,而不是源文件名和目录:

因此,要实现这一点,在您的情况下,您必须执行类似以下名称空间的操作:

File.Copy(imageFile.FileName, Path.Combine(path, Path.GetFileName(imageFile.FileName));
请注意,如果目标文件存在,则此操作将失败。要覆盖该文件,需要向复制方法true添加一个额外参数

编辑:
请注意,OpenFileDialog.CheckFileExists不会返回指示所选文件是否存在的值。相反,它是一个值,指示如果用户指定的文件名不存在,文件对话框是否显示警告。因此,与其在对话框关闭后检查此属性,不如在打开它之前将其设置为true,因为有两件事需要考虑

private void btnImageUpload_Click(object sender, RoutedEventArgs e)
{
    OpenFileDialog imageFile = new OpenFileDialog();
    imageFile.InitialDirectory = @"C:\";
    imageFile.Filter = "Image Files (*.jpg)|*.jpg|All Files(*.*)|*.*";
    imageFile.FilterIndex = 1;

    if (imageFile.ShowDialog() == true)
    {
        if(imageFile.CheckFileExists)
        {
            string path = AppDomain.CurrentDomain.BaseDirectory; // You wont need it 
            System.IO.File.Copy(imageFile.FileName, path); // Copy Needs Source File Name and Destination File Name
        }
    }
}
字符串路径=AppDomain.CurrentDomain.BaseDirectory;您不需要这样做,因为默认目录是程序运行的当前目录。 其次 System.IO.File.CopyimageFile.FileName,路径;复制需要源文件名和目标文件名,所以您只需要指定文件名而不是路径

因此,您的更新代码将

private void btnImageUpload_Click(object sender, RoutedEventArgs e)
{
    OpenFileDialog imageFile = new OpenFileDialog();
    imageFile.InitialDirectory = @"C:\";
    imageFile.Filter = "Image Files (*.jpg)|*.jpg|All Files(*.*)|*.*";
    imageFile.FilterIndex = 1;

    if (imageFile.ShowDialog() == true)
    {
        if(imageFile.CheckFileExists)
        {
            System.IO.File.Copy(imageFile.FileName, SomeName + ".jpg"); // SomeName Must change everytime like ID or something 
        }
    }
}

嗨,维桑,谢谢你的快速回复,我个人认为这不应该是个问题,因为我已经用其他语言上传了文件,但不是用c语言,我正在努力克服它找不到目录的原因,但是我会看看并尝试添加文件名。Np,我不确定这是否能解决问题,但是文档说明第二个参数不能是目录,所以它肯定需要在您的代码中更改。谢谢vesan,它似乎起了作用。你是一个明星,我不敢相信我竟然傻到把文件名漏掉了,我只是以为它会把它复制过来,因为它是一个文件副本。谢谢mohit,我已经解决了这个问题,代码是帮助更好地理解这个问题的基本代码。我没有重申我不需要这样做,但是我将所选图像存储在一个名为Images stored的文件夹中,作为应用程序结构的一部分。我曾希望使用该路径作为直接指向应用程序根目录或图像文件夹的方向,但非常感谢info.NP。解决问题很有趣。你只需在路径后添加/images/就可以实现你的目标。解决它们可能很有趣,但拥有它们肯定不有趣,哈哈,只是一个小小的旁注。我知道当前的路径进入bin\\debug,但如果我要发布此应用程序,如果要向图像文件夹添加子字符串并删除bin\\debug?,它在定位图像文件夹时是否仍然有效?。抱歉,我知道这可能是一个单独的问题。AppDomain.CurrentDomain.BaseDirectory;实际上指向可执行文件的位置,所以现在即使您发布应用程序,它也会指向应用程序可执行文件所在的同一目录。因此,如果您的图像文件夹位于应用程序文件夹/图像中,那么是的,相同的代码将再次起作用。感谢所有帮助,这使您更容易理解这一点。。很难想象我也即将开始我的软件开发荣誉年。DeanOC你编辑了什么?lol。这不是问题,只是一个一般的查询,最好将OpenFileDialog.RestoreDirectory设置为true。