2015-12-01 3 views
1

У меня есть вложенный оператор if-else, который проверяет содержимое папки, которая содержит другие файлы txt. Этот метод либо создает новые файлы txt, либо запрещает доступ, если они уже существуют в папке.Файл существует, если инструкция проверяет, не вернет правильный вывод, если файл не существует, C#

У меня возникла проблема с проверкой наличия файла в папке. В настоящее время независимо от того, что я делаю, команда всегда возвращает «Имя файла уже существует», даже если оно не существует.

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

protected void create(string command, string param1) 
{ 
    // creates an empty file w/ default permissions 
    // if file already exists then error message displayed in console 

    //checks name of the file, checks if its exists, and if clear, creates the file 
    if (param1 == "accounts.txt" || param1 == "audit.txt" || param1 == "groups.txt" || param1 == "files.txt") 
    { 
     Console.WriteLine("Cannot use this filename"); 
     Console.Read(); 
     return; 
    } 
    else if (File.Exists(@"C:\Files\")) 
    { 
     Console.WriteLine("Filename already exists"); 
     Console.Read(); 
     return; 
    } 
    else 
    { 
     string path = Path.Combine(@"C:\Files\", param1); 
     using (StreamWriter sw = File.AppendText(path)) 
     { 
      Console.Write("create " + param1 + ""); 
      string path2 = "C:\\Files\\audit.txt"; 
      using (StreamWriter sw2 = File.AppendText(path2)) 
      { 
       sw2.WriteLine("File " + param1 + " with owner and default permissions created"); //append name of current login from memory 
      } 
      Console.ReadLine(); 
     } 
    } 
} 

ответ

2

Этот блок здесь говорит, если файл не существует, то пишите на консоли «файл уже существует»

else if (!File.Exists(@"C:\Files\")) 
      { 
       Console.WriteLine("File already exists"); 
       Console.Read(); 
       return; 
      } 

Также обратите внимание, что вы используете File.Exists на каталог, а на самом деле не глядя на конкретный файл.

Смотрите также Directory.Exists

MSDN - Directory Exists method

+0

К сожалению, что должно быть «(File.Exists (@» C: \ Files \ ")).. Это проверка каталога, если текстовый файл, существует Если имя файла уже принято, он бросает Я обновил вопрос –

+0

@ l.redir Ближе, но ваш код по-прежнему выполняет File.Exists в каталоге. В противном случае вы делаете Path.Combine для создания полного пути. Вам нужно использовать полный путь к файл в вызове File.Exists(), чтобы проверить, было ли это имя файла уже использовано. –

1

Вы не указать имя файла в коде. Строка @"C:\Files\") не является именем файла, это каталог.

Вы можете использовать что-то вроде.

internal static bool FileOrDirectoryExists(string name) 
{ 
    return (Directory.Exists(name) || File.Exists(name)); 
} 

Для вызова метода необходимо передать действительное имя файла.

var name = Path.Combine(@"C:\Test","MyFile.txt"); 
var ifFileExist = FileOrDirectoryExists(name); 
+0

В этом случае «param1» - это имя файла, которое я передаю в качестве параметра. Я бы сделал что-то вроде: var name = Path.Combine (@ "C: \ Test", param1); var ifFileExist = FileOrDirectoryExists (name); –

+0

Да, вы можете d o это. –

+0

Пожалуйста, отметьте это как ответ, если это будет полезно. С уважением. –

Смежные вопросы