The bit of code below is giving me the error: Cannot read from a closed TextReader.
public static int maxUsers(int logMinute)
{
StreamReader maxNum = new StreamReader(@"C:\Users\jplishka\Desktop\LoginSorted.csv");
string sortedstrline = "";
string sortedUser = null;
string sortedComputer = null;
string sortedDate = null;
string sortedInTimeSec = null;
string sortedOutTimeSec = null;
string sortedInTime = null;
string sortedOutTime = null;
string[] sortedvalue = null;
double loginSec;
double logoutSec;
double minTime;
double maxTime;
int maxLogins = 0;
while (!maxNum.EndOfStream)
{
sortedstrline = maxNum.ReadLine();
sortedvalue = sortedstrline.Split(',');
sortedUser = sortedvalue[0].ToString();
//Console.WriteLine("s--> {0}", sortedUser);
sortedComputer = sortedvalue[1].ToString().TrimStart();
//Console.WriteLine("s--> {0}", sortedComputer);
sortedDate = sortedvalue[2].ToString().TrimStart();
//Console.WriteLine("s--> {0}", sortedDate);
sortedInTimeSec = sortedvalue[3].ToString().Trim();
//Console.WriteLine("s--> {0}", sortedInTimeSec);
loginSec = Convert.ToDouble(sortedInTimeSec);
sortedOutTimeSec = sortedvalue[4].ToString().Trim();
//Console.WriteLine("s--> {0}", sortedOutTimeSec);
logoutSec = Convert.ToDouble(sortedOutTimeSec);
sortedInTime = sortedvalue[5].ToString().TrimStart();
//Console.WriteLine("s--> {0}", sortedInTime);
sortedOutTime = sortedvalue[6].ToString().TrimStart();
//Console.WriteLine("s--> {0}", sortedOutTime);
if ((logMinute > logoutSec) && (logMinute < loginSec))
maxLogins++;
maxNum.Close();
}
return maxLogins;
}
Here is the code for the full program if that helps. The purpose is to take a log file and return the max number of users logged in. the log files is in the format:
action, user, computer, date, time
public class LoginSort
{
public static int maxUsers(int logMinute)
{
StreamReader maxNum = new StreamReader(@"C:\Users\jplishka\Desktop\LoginSorted.csv");
string sortedstrline = "";
string sortedUser = null;
string sortedComputer = null;
string sortedDate = null;
string sortedInTimeSec = null;
string sortedOutTimeSec = null;
string sortedInTime = null;
string sortedOutTime = null;
string[] sortedvalue = null;
double loginSec;
double logoutSec;
double minTime;
double maxTime;
int maxLogins = 0;
while (!maxNum.EndOfStream)
{
sortedstrline = maxNum.ReadLine();
sortedvalue = sortedstrline.Split(',');
sortedUser = sortedvalue[0].ToString();
//Console.WriteLine("s--> {0}", sortedUser);
sortedComputer = sortedvalue[1].ToString().TrimStart();
//Console.WriteLine("s--> {0}", sortedComputer);
sortedDate = sortedvalue[2].ToString().TrimStart();
//Console.WriteLine("s--> {0}", sortedDate);
sortedInTimeSec = sortedvalue[3].ToString().Trim();
//Console.WriteLine("s--> {0}", sortedInTimeSec);
loginSec = Convert.ToDouble(sortedInTimeSec);
sortedOutTimeSec = sortedvalue[4].ToString().Trim();
//Console.WriteLine("s--> {0}", sortedOutTimeSec);
logoutSec = Convert.ToDouble(sortedOutTimeSec);
sortedInTime = sortedvalue[5].ToString().TrimStart();
//Console.WriteLine("s--> {0}", sortedInTime);
sortedOutTime = sortedvalue[6].ToString().TrimStart();
//Console.WriteLine("s--> {0}", sortedOutTime);
if ((logMinute > logoutSec) && (logMinute < loginSec))
maxLogins++;
maxNum.Close();
}
return maxLogins;
}
public static void findLogout(string userName, string computerName, string logDate, string loginTime)
{
StreamReader copylog = new StreamReader(@"C:\Users\jplishka\Desktop\Temp_Log.csv");
string copystrline = "";
string copylogAction = null;
string copylogUser = null;
string copylogComputer = null;
string copylogDate = null;
string copylogTime = null;
string[] copyvalue = null;
double loginSec;
double logoutSec ;
//Console.ReadLine();
while (!copylog.EndOfStream)
{
copystrline = copylog.ReadLine();
copyvalue = copystrline.Split(',');
copylogAction = copyvalue[0].ToString();
//Console.WriteLine(copyvalue[0].ToString().TrimStart());
//Console.WriteLine("c--> {0}", copylogAction);
copylogUser = copyvalue[1].ToString().TrimStart();
//Console.WriteLine(copyvalue[1].ToString().TrimStart());
//Console.WriteLine("c--> {0}", copylogUser);
copylogComputer = copyvalue[2].ToString().TrimStart();
//Console.WriteLine(copyvalue[2].ToString().TrimStart());
//Console.WriteLine("c--> {0}", copylogComputer);
copylogDate = copyvalue[3].ToString().TrimStart();
//Console.WriteLine(copyvalue[3].ToString().TrimStart());
//Console.WriteLine("c--> {0}", copylogDate);
copylogTime = copyvalue[4].ToString().TrimStart();
//Console.WriteLine(copyvalue[4].ToString().TrimStart());
//Console.WriteLine("c--> {0}", copylogTime);
if ((userName == copylogUser) && (copylogUser != "Action "))
{
if ((computerName == copylogComputer) && (copylogTime != loginTime))
{
using (StreamWriter loginSorted = File.AppendText(@"C:\Users\jplishka\Desktop\LoginSorted.csv"))
{
loginSec = TimeSpan.Parse(loginTime).TotalSeconds;
logoutSec = TimeSpan.Parse(copylogTime).TotalSeconds;
//Console.WriteLine("secin {0} secout{1}", loginSec, logoutSec);
//Console.ReadLine();
loginSorted.WriteLine("{0},{1},{2},{3},{4},{5},{6}", copylogUser, copylogComputer, logDate, loginSec, logoutSec, loginTime, copylogTime);
loginSorted.Dispose();
break;
}
}
}
}//loop on temp file
copylog.Close();
}//end findLogout
public static void Main(string[] args)
{
string LogOn = "Log On ";
int i;
if (File.Exists(@"C:\Users\jplishka\Desktop\Log.csv"))
{
if (File.Exists(@"C:\Users\jplishka\Desktop\Temp_Log.csv"))
File.Delete(@"C:\Users\jplishka\Desktop\Temp_Log.csv");
if (File.Exists(@"C:\Users\jplishka\Desktop\LoginSorted.csv"))
File.Delete(@"C:\Users\jplishka\Desktop\LoginSorted.csv");
File.Copy(@"C:\Users\jplishka\Desktop\Log.csv", @"C:\Users\jplishka\Desktop\Temp_Log.csv");
}
else
{
Console.WriteLine("The file \"Log.csv\" is not present");
Console.ReadLine();
}
StreamReader log = new StreamReader(@"C:\Users\jplishka\Desktop\Log.csv");
int maxLogins = 0;
int currentLogins = 0;
string strline = "";
string logAction = null;
string logUser = null;
string logComputer = null;
string logDate = null;
string logTime = null;
string[] value = null;
while (!log.EndOfStream)
{
//Console.ReadLine();
strline = log.ReadLine();
value = strline.Split(',');
logAction = value[0].ToString();
//Console.WriteLine(value[0].ToString().TrimStart());
//Console.WriteLine("--> {0}", logAction);
logUser = value[1].ToString().TrimStart();
//Console.WriteLine(value[1].ToString().TrimStart());
//Console.WriteLine("--> {0}", logUser);
logComputer = value[2].ToString().TrimStart();
//Console.WriteLine(value[2].ToString().TrimStart());
//Console.WriteLine("--> {0}", logComputer);
logDate = value[3].ToString().TrimStart();
//Console.WriteLine(value[3].ToString().TrimStart());
//Console.WriteLine("--> {0}", logDate);
logTime = value[4].ToString().TrimStart();
//Console.WriteLine(value[4].ToString().TrimStart());
//Console.WriteLine("--> {0}", logTime);
//if user logs in, the find logout time
if (logAction == LogOn)
{
LoginSort.findLogout(logUser, logComputer, logDate, logTime);
}
}//end of file reached, clean up time
Console.WriteLine("finished making files, now time to figure out logins");
Console.ReadLine();
for (i=0;i<=1440;i++)
{
currentLogins = LoginSort.maxUsers(i);
if (currentLogins > maxLogins)
maxLogins = currentLogins;
}
Console.WriteLine("Time for cleanup");
Console.ReadLine();
if (File.Exists(@"C:\Users\jplishka\Desktop\Temp_Log.csv"))
{
File.Delete(@"C:\Users\jplishka\Desktop\Temp_Log.csv");
}
if (File.Exists(@"C:\Users\jplishka\Desktop\LoginSorted.csv"))
{
File.Delete(@"C:\Users\jplishka\Desktop\LoginSorted.csv");
}
Console.WriteLine("and we're done!");
Console.ReadLine();
}//end main
}