2015-02-20 2 views
0

Это должен быть глупый вопрос, но с моей логикой я не могу понять, почему он не выходит. Это мой цикл:До тех пор, пока цикл не выйдет

Random _random = new Random(); 
int num; 
char let; 
string TempName = "~"; 
string sTempPath; 
do 
{ 
    while (TempName.Length < 12) 
    { 
     num = _random.Next(0, 26); 
     let = (char)('a' + num); 
     TempName = TempName + let; 
    } 
    sTempPath = sDirectory + @"\" + TempName + @"." + sExt; 
    //MessageBox.Show(sTempPath); 
} while (!File.Exists(sTempPath)); 

Так что с моей логикой, когда начинается Do цикл, он непосредственно запускает цикл, а внутри него. Пока цикл существует после того, как TempName.Length больше 12, а затем цикл должен выйти, поскольку файл не существует. Итак, где я не прав?

+3

Вы делаете жизнь трудно для себя. Замените все это на ['Path.GetTempFileName'] (https://msdn.microsoft.com/en-us/library/system.io.path.gettempfilename%28v=vs.110%29.aspx?f=255&MSPPError = -2147217396). –

+3

Мне кажется, что очень легко понять это с помощью короткой сессии в отладчике. –

+1

Эта переменная TempName выглядит так, что ее нужно будет сбросить, прежде чем вводить цикл while. – LarsTech

ответ

2

В настоящее время ваша петля работает до тех пор, покаFile не существует. Если вы хотите остановиться, когда файл не существует, измените условие на File.Exists, удалив оператор отрицания (!).

+0

Ради Бога, я уверен, что это было что-то простое, что я отсутствовал. Я чувствую себя такой свалкой ... – Maria

0

Неправильное состояние.

while(File.Exists(sTempPath))

0
Random _random = new Random(); 
int num; 
char let; 
string TempName = "~"; 
string sTempPath = string.Empty; 
while (TempName.Length < 12 || File.Exists(sTempPath)) 
{ 
    num = _random.Next(0, 26); 
    let = (char)('a' + num); 
    TempName = TempName + let; 
    sTempPath = sDirectory + @"\" + TempName + @"." + sExt; 
} 
Смежные вопросы