2016-10-13 6 views
-1

У меня есть DirectoryNotFoundException в TXT-файле, если я использую полный путь, который он работает, но я не хочу использовать полный путь, потому что хочу, чтобы программа работала независимо от того, где она размещена (совместимость с максимальным количеством компьютера)Как я могу исправить это DirectoryNotFoundException?

Вот мой код

private void SaveClose_Click(object sender, RoutedEventArgs e) 
{ 
    if (Windowed.IsChecked == true) 
     windowed = true; 
    else 
     windowed = false; 

    string textWriteWindowed; 

    if (windowed == true) 
    { 
     textWriteWindowed = "-screen-fullscreen 0" + Environment.NewLine; 
    } 
    else 
    { 
     textWriteWindowed = "-screen-fullscreen 1" + Environment.NewLine; 
    } 

    var selectedResolution = ResolutionBox.SelectedItem.ToString(); 
    var split = selectedResolution.Split('x'); 
    widthChoose = Int32.Parse(split[0]); 
    heightChoose = Int32.Parse(split[1]); 

    string textWriteWidth; 
    textWriteWidth = "-screen-width " + widthChoose + Environment.NewLine; 

    string textWriteHeight; 
    textWriteHeight = "-screen-height " + heightChoose + Environment.NewLine; 

    File.WriteAllText(@"\Resources\arguments.txt", textWriteWindowed); 
    File.AppendAllText(@"\Resources\arguments.txt", textWriteWidth); 
    File.AppendAllText(@"\Resources\arguments.txt", textWriteHeight); 

    this.Close(); 
} 
+0

Когда вы получаете мгновенный downvote; -; – Francefire

+0

Попробуйте сначала проверить, существует ли каталог [Directory.Exists method] (https://msdn.microsoft.com/de-de/library/system.io.directory.exists (v = vs.110) .aspx) – phifi

+0

«arguments.txt» находится в папке с именем «Ressources» рядом с моей программой. Я не понимаю, почему она говорит мне, как мне ее писать? – Francefire

ответ

0

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

, если папка не существует создать его с помощью

Directory.CreateDirectory(...) 

Directory.Exists(..) 

вы можете использовать для проверки существования FOLDER

+0

Я не знать, где их вывести ^^ ' – Francefire

1

Первый аргумент File.WriteAllText принимает путь в качестве входных данных. Все, что вы упомянули, не является абсолютным путем, но это только относительный путь файла. WriteAllText создает файл, но сам не создает каталог. Так что-то вроде:

File.WriteAllText(@"\arguments.txt", textWriteWindowed); 

должны работать (и создать файл в соответствующем диске), но

File.WriteAllText(@"\Resources\arguments.txt", textWriteWindowed); 

не будет работать. Поэтому, если вы хотите создать файл в пути, где находится приложение, вы можете сделать что-то вроде:

string folder=Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName); 
File.WriteAllText(@"\arguments2.txt", "ABC"); 

Если вы хотите создать каталог, то вы могли бы сделать что-то вроде:

System.IO.FileInfo file = new System.IO.FileInfo(filePath); 
file.Directory.Create();// If the directory already exists, this method does nothing. 

System.IO.File.WriteAllText(file.FullName, textWriteWindowed); 

Надеюсь, это ответит на ваш запрос.

+0

Привет, спасибо за ваш ответ, для чего предназначена ABC? и почему "аргументы ** 2 **. txt" – Francefire

0

Я не знаю, как, но делать это работало для меня:

File.WriteAllText(@"./arguments.txt", textWriteWindowed); File.AppendAllText(@"./arguments.txt", textWriteWidth); File.AppendAllText(@"./arguments.txt", textWriteHeight);

0

Если вы хотите, чтобы получить локальный путь к файлу, которые выполняются использовать это:

var fInfo = new FileInfo(System.Reflection.Assembly.GetCallingAssembly().Location); 

Оттуда вы должны были бы сделать следующее:

var parentDir = new DirectoryInfo(fInfo.DirectoryName); 
var subDir = new DirectoryInfo(parentDir.FullName + "Resource"); 
if(!subDir.Exists) 
    subDir.Create(); 

Это гарантирует, что у вас всегда есть папка в каталоге исполняемого файла. Но так, чтобы вы знали, это абсолютно ужасный код и никогда не должен реализовываться в такой среде производства. Что делать, если какой-либо knucklehead sysAdmin решает разместить вашу программу/папку в области, в которой у текущего пользователя нет доступа/записи тоже? Лучшее место для записи -% APPDATA%, это гарантирует, что у пользователя всегда будут права на чтение/запись для того, что вы пытаетесь выполнить.