如何从文件夹wpf获取文件路径?

时间:2014-02-19 13:43:47

标签: c# wpf

我遇到了问题,我正在开发一个WPF应用程序,我有一个名为“help”的页面,只有一个按钮 go  当用户单击此按钮时,我必须向帮助文件夹中的用户提供pdf文件。 现在我的问题是如果我写这样的路径

**string pdfurl1 = ((@"D:\addnkit\projects\wdine\widdne_working\Wdine Us\Wddine\Wine\Help\Emerald Wine Dispensing Software.pdf"));
                    System.Diagnostics.Process.Start(pdfurl1);**

它成功运作

但我知道这不会在其他电脑上运行,所以我想知道如何编写可在任何电脑上运行的相同代码

我也尝试过这样的

(@"pack://application:,,,/Widne;component/help/mypdf.pdf" 

但它不起作用

[更新]

我已经尝试了所有的解决方案,但它还没有工作但我不知道为什么? 请再次检查 Widne>>帮助>> mypdf

enter image description here

8 个答案:

答案 0 :(得分:7)

使用你的exe的路径

System.AppDomain.CurrentDomain.BaseDirectory

string path = System.IO.Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName)
             + "\\Widne\\component\\help\\mypdf.pdf";

System.Diagnostics.Process.Start(path )

更新:

申请他必须存在的文件,在这种情况下,您将该属性设为PDF文件Copy to Output DirectoryCopy always

答案 1 :(得分:4)

第二种方法packuri是你应该使用的。

您的问题很可能是您的mypdf.pdf需要在Visual Studio中更改它的属性,以便它在构建时实际复制pdf文件而不是嵌入到应用程序中,从而阻止最终用户阅读pdf文件。

在pdf文件上设置这些属性并重建应用程序

  

构建行动:内容
  复制到输出目录:始终复制

编辑:查看this answer以获取有关构建操作的说明。

答案 2 :(得分:1)

您可以使用相对路径:

./ - start at the .exe directory

../ - go up one folder from the .exe

../../ - go up two folders etc.

编辑:

假设你的.exe文件夹在bin文件夹中:

**string pdfurl1 = ((@"..\Help\Emerald Wine Dispensing Software.pdf"));
                    System.Diagnostics.Process.Start(pdfurl1);**

答案 3 :(得分:1)

Diagnostics.Process类与WPF无关。如果路径相对于您的应用程序,则可以使用相对路径。如果您担心应用程序使用与存储程序集的目录不同的工作目录运行,则可以使用

查询该程序集的原始文件夹。
 Assembly.GetExecutingAssembly().CodeBase

并使用Path.Combine构建PDF的路径。

答案 4 :(得分:0)

您可以使用Directory.GetCurrentDirectory()。这将为您提供启动应用程序的目录。因此,如果您将文件放在应用程序启动的位置,它将是这样的:

string pdfurl1 = ((Directory.GetCurrentDirectory() + "\Emerald Wine Dispensing Software.pdf"));
System.Diagnostics.Process.Start(pdfurl1);

答案 5 :(得分:0)

也许here的答案可以帮助你

使用Path类来构建路径。它会做正确的事。

  

对包含文件或目录的String实例执行操作   路径信息。这些操作在跨平台中执行   方式。

var full = Path.Combine(baseDir, dirFragment);

答案 6 :(得分:0)

对于目录对话框以获取目录路径,首先添加引用System.Windows.Forms,然后单击Resolve,然后将此代码放在按钮单击中。

        var dialog = new FolderBrowserDialog();
        dialog.ShowDialog();
        folderpathTB.Text = dialog.SelectedPath;

(folderpathTB是TextBox的名称,我将wana放在文件夹路径中,或者你也可以将它分配给字符串变量,例如。)

        string folder = dialog.SelectedPath;

如果您获得FileName / path,只需在Button Click

上执行此操作
        FileDialog fileDialog = new OpenFileDialog();
        fileDialog.ShowDialog();
        folderpathTB.Text = fileDialog.FileName;

(folderpathTB是TextBox的名称,我将wana放入文件路径,或者你也可以将它分配给字符串变量)

注意:对于Folder Dialog,必须将System.Windows.Forms.dll添加到项目中,否则它将无效。

答案 7 :(得分:0)

您也可以尝试使用此代码:

std::tuple<int, int> foo_tuple() 
{
  return {1, -1};  // Error until C++17
  return std::make_tuple(1, -1); // Always works
}

并更改内容的构建类型:

enter image description here