2015-04-19 7 views
-1

Мне нужно получить местоположение определенного текстового файла до того, как я его получу с помощью методов sytem.IO. Я пытаюсь получить приложение, работающее на всех компьютерах, но когда я переключаюсь между компьютерами, похоже, меняет мою ручку памяти D: drive и F: диск, поэтому местоположение меняется. Это то, что я пытался использовать:Как я могу получить местоположение текстового файла

baseLocation = Application.ExecutablePath; 

string UsernameTXT = @PublicVariables.baseLocation + "//userName.txt" 
StreamReader user_Login = new StreamReader(UsernameTXT); 
string PasswordTXT = @PublicVariables.baseLocation + "//userPass.txt" 
StreamReader pass_Login = new StreamReader(PasswordTXT); 

while (pass_Login.Peek() != -1) 
{ 
    user = user_Login.ReadLine(); 
    pass = pass_Login.ReadLine(); 

    if ((user == textBox1.Text) && (pass == textBox2.Text)) 
    { 
     MessageBox.Show("Login successful!", 
      "Success"); 
    } 
} 

Я знаю, что эта часть не так:

string UsernameTXT = @PublicVariables.baseLocation + "//userName.txt" 
StreamReader user_Login = new StreamReader(UsernameTXT); 
string PasswordTXT = @PublicVariables.baseLocation + "//userPass.txt" 
StreamReader pass_Login = new StreamReader(PasswordTXT); 

его только, что я понятия не имею, что использовать там вместо этого.

Любая помощь приветствуется.

ответ

1

Возможно, вы захотите взглянуть на Path.Combine method, который позволяет прикрепить имя файла к пути, чтобы получить полное имя файла.

В вашем примере, предполагая, что файлы хранятся в вашем Application.StartupPath:

baseLocation = Application.StartupPath; 

string usernameFile = Path.Combine(baseLocation, "userName.txt"); 
string passwordFile = Path.Combine(baseLocation, "userPass.txt"); 

ПРИМЕЧАНИЕ: Никогда не храните незашифрованные пароли!

Для чтения и совпадать с именем пользователя с паролем, вы можете сделать следующее:

var userNameFound = false; 
ar passwordMatches = false; 
try 
{ 
    var ndx = 0 
    var passwords = File.ReadAllLines(passwordFile); 
    foreach (var userName in File.ReadAllLines(usernameFile)) 
    { 
     userNameFound = userName.Equals(textBox1.Text); 
     if (userNameFound && ndx < passwords.Length) 
     { 
      passwordMatches = passwords[ndx].Equals(textBox2.Text); 
      break; // no need to search further. 
     } 
     ndx++; 
    } 
} 
catch (FileNotFoundException) 
{ 
    MessageBox.Show("Failed to open files", "Error"); 
}  

И сообщить результат:

if (userNameFound) 
{ 
    if (passwordMatches) 
     MessageBox.Show("Login successful!", "Success"); 
    else 
     MessageBox.Show("Incorrect password", "Error"); 
} 
else 
{ 
    MessageBox.Show("Incorrect login", "Error"); 
} 
+0

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

+1

Хорошо, похоже, вам нужно «StartupPath». – Alex

+1

Я могу только повторить это: ** Никогда не храните незашифрованные пароли в текстовом файле! ** – JensG

1

Используйте этот код, чтобы получить имя съемного диска и добавьте к нему свое текстовое имя

DriveInfo[] ListDrives = DriveInfo.GetDrives(); 
string driveName=stirng.Empty; 
foreach (DriveInfo Drive in ListDrives) 
{ 
    if (Drive.DriveType == DriveType.Removable) 
    { 
    driveName=Drive.Name; 
    }  
} 
+0

. говоря мне, что я пропустил ссылку для «DriveInfo []» –

+1

@Adam Higgins добавить сначала пространство имен System.IO –

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

  • Нет связанных вопросов^_^