Читать файл из неизвестного места? - PullRequest
1 голос
/ 14 января 2012

У меня есть этот код для чтения файла от Microsoft

@"C:\Users\computing\Documents\mikec\assignment2\task_2.txt"

Это прекрасно работает, когда я работаю над ним, но когда я буду сдавать это задание, у моего лектора не будет того же каталогакак я.

Так что мне было интересно, есть ли способ прочитать его только из файла, в котором хранится программа?.

Я думал, что могу добавить его в качестве ресурса, но яне уверен, что это правильный путь для назначения, который предполагается разрешить в любом файле.

Спасибо

Ответы [ 5 ]

4 голосов
/ 14 января 2012

Вы можете пропустить путь - это будет читать файл из рабочего каталога программы.

Просто @"task_2.txt" сделает.

ОБНОВЛЕНИЕ : Обратите вниманиеэтот метод не будет работать в некоторых обстоятельствах.Если ваш лектор использует какой-то автоматический бегун (скрипт, приложение) для проверки вашего приложения, то решение @ ken2k будет гораздо более надежным.

2 голосов
/ 14 января 2012

Если вы хотите прочитать файл из каталога, в котором находится программа, используйте

using System.IO;
...
string myFileName = "file.txt";
string myFilePath = Path.Combine(Application.StartupPath, myFileName);

РЕДАКТИРОВАТЬ: Более универсальное решение для приложений, отличных от winforms:

string myFilePath = Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), myFileName);
1 голос
/ 14 января 2012

Если это приложение командной строки, вы должны использовать имя файла в качестве аргумента командной строки вместо использования фиксированного пути. Что-то вроде;

public static void Main(string[] args)
{
    if (args == null || args.Length != 1)
    {
        Console.WriteLine("Parameters are not ok, usage: ...");
        return;
    }

    string filename = args[0];

...

... должно позволить вам получить имя файла из команды.

0 голосов
/ 14 января 2012

Используйте относительный путь.

вы можете поместить свой файл в папку, где находится ваше приложение. Вы можете использовать метод Directory.GetCurrentDirectory (). ToString (), чтобы получить текущую папку приложения. Если вы поместите свои файлы в подпапку, вы можете использовать Directory.GetCurrentDirectory (). ToString () + "\ subfolderName \"

File.OpenRead(Directory.GetCurrentDirectory().ToString() + "\fileName.extension")


StreamReader file = new StreamReader(File.OpenRead(Directory.GetCurrentDirectory().ToString() + ""));
            string fileTexts = file.ReadToEnd();
0 голосов
/ 14 января 2012

Вы можете использовать метод GetFolderPath , чтобы получить папку с документами текущего пользователя:

Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)

и в качестве примера:

string myDocuments = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
string file = Path.Combine(myDocuments, @"mikec\assignment2\task_2.txt");
// TODO: do something with the file like reading it for example
string contents = File.ReadAllText(file);
...