访问文件时出现问题

时间:2010-05-13 16:20:08

标签: c# winforms file

我有winforms应用程序,它引用了库MyLibrary。

MyLibrary有方法:

string[] GiveMeNamesOfAirports()
{
string[] lines= File.ReadLines("airports.txt");
foreach(string line in lines)
...
}

当我运行Winforms应用程序时:

我收到错误:

无法找到

文件。

我正在尝试其他功能:

string[] lines = File.ReadAllLines(Path.Combine(System.Environment.CurrentDirectory, "airports.txt"));

string[]  lines = File.ReadAllLines(Path.Combine(Assembly.GetExecutingAssembly().Location, "airports.txt")); 
string[] lines = File.ReadAllLines(Path.Combine(Assembly.GetAssembly(typeof(Airport)).Location, "airports.txt"));

文件位于项目MyLibrary中(我在解决方案中看到它,它位于MyLibrary的文件夹中。

我将Copy to ouptput目录设置为Copy always,并将Action Action设置为Content。

4 个答案:

答案 0 :(得分:1)

要使System.Environment.CurrentDirectory正常工作,您需要在从VS内部运行时,在bin \ release或bin \ debug(取决于您运行的是哪个buid)目录中拥有"airports.txt"文件。

使用Assembly位置的两个将无法工作,因为Location包含程序集名称,因此它不仅仅包含路径。

答案 1 :(得分:1)

使用文件的相对路径名是不明智的。您的程序的工作目录可能会更改,然后将无法找到该文件。生成文件的绝对路径名,如下所示:

    public static string GetAbsolutePath(string filename) {
        string dir = System.IO.Path.GetDirectoryName(Application.StartupPath);
        return System.IO.Path.Combine(dir, filename);
    }

用法:

         string[] lines= File.ReadLines(GetAbsolutePath(@"mylibrary\airports.txt"));

答案 2 :(得分:0)

这是否意味着 MyLibrary 有一个名为airports.txt的文件?

如果是这样,您需要确保将文件设置为包含在构建输出中。在Visual Studio中右键单击该文件,然后选择“属性”。在“属性”窗口中,您可以将Copy to Output Directory属性设置为Copy Always,并且您不应再遇到任何问题。

答案 3 :(得分:0)

上述每个方法都假设文件“airports.txt”与可执行文件位于同一文件夹中。请注意,通过Visual Studio默认设置,可执行文件的调试版本(在调试时使用)位于bin \ Debug,并且您将为用户提供的发行版本位于bin \ Release。

相关问题