By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
435,247 Members | 1,018 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 435,247 IT Pros & Developers. It's quick & easy.

Any problems with writing the information into a file - Multi-users perform writing the same file at the same time ????

P: n/a
Hi,

I have a Web application in ASP.NET. My Application allows the users upload
files into the server after checking their user names and passwords. For
each transaction, the Web program will write the information about user
name, filename upload, filesize, date and time of uploading into the log
file. (The name of the log file is constructed by Current Year and Current
Month in my program). Is there any problems with writing into the log file
if there are multi-users access on the same page to upload files ????. My
program works OK with the code below, but I don't know if there is any
problems when multi-users perform writing into the same log file at the same
time ??? Here is a part of my code to open the log file for editing :

'WRITE LO LOG FILE
Dim strFile as string= CurrYear & CurrMonth
Dim LogFile As String = Server.MapPath("LOGS") & "\" & strFile &
".log"

Dim aLogfile As FileInfo = New FileInfo(LogFile)
If aLogfile.Exists Then
Dim objStreamWriter as StreamWriter
objStreamWriter = File.AppendText(LogFile)
Dim strLine as string= CurrYear & CurrMonth & CurrDay &
CurrHour & CurrMin & CurrSec & " " & radioFileUp.selectedValue & " " &
Session("UserID") & " " & Carrier & " " & fn & " " & fsize & " bytes "
objStreamWriter.WriteLine(strLine)
objStreamWriter.Close()
Else
Dim objStreamWriter as StreamWriter = File.CreateText(LogFile)
Dim strLine as string= CurrYear & CurrMonth & CurrDay &
CurrHour & CurrMin & CurrSec & " " & radioFileUp.selectedValue & " " &
Session("UserID") & " " & Carrier & " " & fn & " " & fsize & " bytes "
objStreamWriter.WriteLine(strLine)
objStreamWriter.Close()
End If

Please give me some advises. Do I need to change anything in my code for it
?. Thanks in advance.
Nov 19 '05 #1
Share this Question
Share on Google+
4 Replies


P: n/a
Yes...you can have a file lock condition. You'll need to serialize access
to the code. I think in VB.Net you can wrap the offending code in a
SynchLock statement:
http://msdn.microsoft.com/library/de...tmSyncLock.asp

Also, why reinvent the wheel?
http://logging.apache.org/log4net/

Karl

--
MY ASP.Net tutorials
http://www.openmymind.net/
"HNguyen" <bi********@yahoo.com> wrote in message
news:%2******************@TK2MSFTNGP14.phx.gbl...
Hi,

I have a Web application in ASP.NET. My Application allows the users upload files into the server after checking their user names and passwords. For
each transaction, the Web program will write the information about user
name, filename upload, filesize, date and time of uploading into the log
file. (The name of the log file is constructed by Current Year and Current
Month in my program). Is there any problems with writing into the log file if there are multi-users access on the same page to upload files ????. My
program works OK with the code below, but I don't know if there is any
problems when multi-users perform writing into the same log file at the same time ??? Here is a part of my code to open the log file for editing :

'WRITE LO LOG FILE
Dim strFile as string= CurrYear & CurrMonth
Dim LogFile As String = Server.MapPath("LOGS") & "\" & strFile &
".log"

Dim aLogfile As FileInfo = New FileInfo(LogFile)
If aLogfile.Exists Then
Dim objStreamWriter as StreamWriter
objStreamWriter = File.AppendText(LogFile)
Dim strLine as string= CurrYear & CurrMonth & CurrDay &
CurrHour & CurrMin & CurrSec & " " & radioFileUp.selectedValue & " " &
Session("UserID") & " " & Carrier & " " & fn & " " & fsize & " bytes "
objStreamWriter.WriteLine(strLine)
objStreamWriter.Close()
Else
Dim objStreamWriter as StreamWriter = File.CreateText(LogFile)
Dim strLine as string= CurrYear & CurrMonth & CurrDay &
CurrHour & CurrMin & CurrSec & " " & radioFileUp.selectedValue & " " &
Session("UserID") & " " & Carrier & " " & fn & " " & fsize & " bytes "
objStreamWriter.WriteLine(strLine)
objStreamWriter.Close()
End If

Please give me some advises. Do I need to change anything in my code for it ?. Thanks in advance.

Nov 19 '05 #2

P: n/a
Hi Karl,

I've tried to add SyncLock and EndLock. The code looks like this :

If aLogfile.Exists Then

Dim objStreamWriter as StreamWriter
objStreamWriter = File.AppendText(LogFile)
Dim strLine as string= CurrYear & CurrMonth & CurrDay &
CurrHour & CurrMin & CurrSec & " " & radioFileUp.selectedValue & " " &
Session("UserID") & " " & Carrier & " " & fn & " " & fsize & " bytes "

SyncLock objStreamWriter.WriteLine(strLine)
End SyncLock
objStreamWriter.Close()

Else

Dim objStreamWriter as StreamWriter = File.CreateText(LogFile)
Dim strLine as string= CurrYear & CurrMonth & CurrDay &
CurrHour & CurrMin & CurrSec & " " & radioFileUp.selectedValue & " " &
Session("UserID") & " " & Carrier & " " & fn & " " & fsize & " bytes "

SyncLock objStreamWriter.WriteLine(strLine)
End SyncLock
objStreamWriter.Close()

End If

I've got the error like this :

Compilation Error
Description: An error occurred during the compilation of a resource required
to service this request. Please review the following specific error details
and modify your source code appropriately.

Compiler Error Message: BC30491: Expression does not produce a value.

Source Error:
Line 202: Dim strLine as string= CurrYear & CurrMonth & CurrDay &
CurrHour & CurrMin & CurrSec & " " & radioFileUp.selectedValue & " " &
Session("UserID") & " " & Carrier & " " & fn & " " & fsize & " bytes "
Line 203:
Line 204: SyncLock objStreamWriter.WriteLine(strLine)
Line 205: End SyncLock
Line 206: objStreamWriter.Close()

Any suggestions ??? Thanks.

====================================

"Karl Seguin" <karl REMOVE @ REMOVE openmymind REMOVEMETOO . ANDME net>
wrote in message news:OP**************@TK2MSFTNGP10.phx.gbl...
Yes...you can have a file lock condition. You'll need to serialize access to the code. I think in VB.Net you can wrap the offending code in a
SynchLock statement:
http://msdn.microsoft.com/library/de...tmSyncLock.asp
Also, why reinvent the wheel?
http://logging.apache.org/log4net/

Karl

--
MY ASP.Net tutorials
http://www.openmymind.net/
"HNguyen" <bi********@yahoo.com> wrote in message
news:%2******************@TK2MSFTNGP14.phx.gbl...
Hi,

I have a Web application in ASP.NET. My Application allows the users upload
files into the server after checking their user names and passwords. For each transaction, the Web program will write the information about user
name, filename upload, filesize, date and time of uploading into the log
file. (The name of the log file is constructed by Current Year and Current Month in my program). Is there any problems with writing into the log

file
if there are multi-users access on the same page to upload files ????. My program works OK with the code below, but I don't know if there is any
problems when multi-users perform writing into the same log file at the

same
time ??? Here is a part of my code to open the log file for editing :
'WRITE LO LOG FILE
Dim strFile as string= CurrYear & CurrMonth
Dim LogFile As String = Server.MapPath("LOGS") & "\" & strFile &
".log"

Dim aLogfile As FileInfo = New FileInfo(LogFile)
If aLogfile.Exists Then
Dim objStreamWriter as StreamWriter
objStreamWriter = File.AppendText(LogFile)
Dim strLine as string= CurrYear & CurrMonth & CurrDay &
CurrHour & CurrMin & CurrSec & " " & radioFileUp.selectedValue & " " &
Session("UserID") & " " & Carrier & " " & fn & " " & fsize & " bytes "
objStreamWriter.WriteLine(strLine)
objStreamWriter.Close()
Else
Dim objStreamWriter as StreamWriter = File.CreateText(LogFile)
Dim strLine as string= CurrYear & CurrMonth & CurrDay &
CurrHour & CurrMin & CurrSec & " " & radioFileUp.selectedValue & " " &
Session("UserID") & " " & Carrier & " " & fn & " " & fsize & " bytes "
objStreamWriter.WriteLine(strLine)
objStreamWriter.Close()
End If

Please give me some advises. Do I need to change anything in my code

for it
?. Thanks in advance.


Nov 19 '05 #3

P: n/a
SynchLock
objStreamWriter.WriteLIne(strLine)
end SynchLock

(don't put them on the same line).

Also, you probabably need to wrap the entire File.AppendText(LogFile) in
there...and you could use some exception handling:

Dim objStreamWriter as StreamWriter
Dim strLine as string= CurrYear & CurrMonth & CurrDay & CurrHour &
CurrMin & CurrSec & " " & radioFileUp.selectedValue & " " &
Session("UserID") & " " & Carrier & " " & fn & " " & fsize & " bytes "
SyncLock
try
objStreamWriter = File.AppendText(LogFile)
objStreamWriter.WriteLine(strLine)
finally
if not objStreamWriter is nothing then
objStreamWriter.Close()
end if
end try
End SyncLock
Finally, your code should be refactored...the If and Else have too much
repeated code (ie, the strLine, the WriteLine, the associated exception
handling and locking)...all that causes you is (a) more time to write it (b)
more time to change it (c) more time to fix it (d) more likely to have bugs
(e) more likely to introduce bugs....refactoring is your friend

karl


--
MY ASP.Net tutorials
http://www.openmymind.net/
"HNguyen" <bi********@yahoo.com> wrote in message
news:eE**************@TK2MSFTNGP10.phx.gbl...
Hi Karl,

I've tried to add SyncLock and EndLock. The code looks like this :

If aLogfile.Exists Then

Dim objStreamWriter as StreamWriter
objStreamWriter = File.AppendText(LogFile)
Dim strLine as string= CurrYear & CurrMonth & CurrDay &
CurrHour & CurrMin & CurrSec & " " & radioFileUp.selectedValue & " " &
Session("UserID") & " " & Carrier & " " & fn & " " & fsize & " bytes "

SyncLock objStreamWriter.WriteLine(strLine)
End SyncLock
objStreamWriter.Close()

Else

Dim objStreamWriter as StreamWriter = File.CreateText(LogFile)
Dim strLine as string= CurrYear & CurrMonth & CurrDay &
CurrHour & CurrMin & CurrSec & " " & radioFileUp.selectedValue & " " &
Session("UserID") & " " & Carrier & " " & fn & " " & fsize & " bytes "

SyncLock objStreamWriter.WriteLine(strLine)
End SyncLock
objStreamWriter.Close()

End If

I've got the error like this :

Compilation Error
Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.

Compiler Error Message: BC30491: Expression does not produce a value.

Source Error:
Line 202: Dim strLine as string= CurrYear & CurrMonth & CurrDay &
CurrHour & CurrMin & CurrSec & " " & radioFileUp.selectedValue & " " &
Session("UserID") & " " & Carrier & " " & fn & " " & fsize & " bytes "
Line 203:
Line 204: SyncLock objStreamWriter.WriteLine(strLine)
Line 205: End SyncLock
Line 206: objStreamWriter.Close()

Any suggestions ??? Thanks.

====================================

"Karl Seguin" <karl REMOVE @ REMOVE openmymind REMOVEMETOO . ANDME net>
wrote in message news:OP**************@TK2MSFTNGP10.phx.gbl...
Yes...you can have a file lock condition. You'll need to serialize access
to the code. I think in VB.Net you can wrap the offending code in a
SynchLock statement:

http://msdn.microsoft.com/library/de...tmSyncLock.asp

Also, why reinvent the wheel?
http://logging.apache.org/log4net/

Karl

--
MY ASP.Net tutorials
http://www.openmymind.net/
"HNguyen" <bi********@yahoo.com> wrote in message
news:%2******************@TK2MSFTNGP14.phx.gbl...
Hi,

I have a Web application in ASP.NET. My Application allows the users

upload
files into the server after checking their user names and passwords. For each transaction, the Web program will write the information about user name, filename upload, filesize, date and time of uploading into the log file. (The name of the log file is constructed by Current Year and Current Month in my program). Is there any problems with writing into the log

file
if there are multi-users access on the same page to upload files ????. My program works OK with the code below, but I don't know if there is any
problems when multi-users perform writing into the same log file at the
same
time ??? Here is a part of my code to open the log file for
editing :
'WRITE LO LOG FILE
Dim strFile as string= CurrYear & CurrMonth
Dim LogFile As String = Server.MapPath("LOGS") & "\" & strFile

& ".log"

Dim aLogfile As FileInfo = New FileInfo(LogFile)
If aLogfile.Exists Then
Dim objStreamWriter as StreamWriter
objStreamWriter = File.AppendText(LogFile)
Dim strLine as string= CurrYear & CurrMonth & CurrDay &
CurrHour & CurrMin & CurrSec & " " & radioFileUp.selectedValue & " " & Session("UserID") & " " & Carrier & " " & fn & " " & fsize & " bytes " objStreamWriter.WriteLine(strLine)
objStreamWriter.Close()
Else
Dim objStreamWriter as StreamWriter = File.CreateText(LogFile) Dim strLine as string= CurrYear & CurrMonth & CurrDay &
CurrHour & CurrMin & CurrSec & " " & radioFileUp.selectedValue & " " & Session("UserID") & " " & Carrier & " " & fn & " " & fsize & " bytes " objStreamWriter.WriteLine(strLine)
objStreamWriter.Close()
End If

Please give me some advises. Do I need to change anything in my code

for
it
?. Thanks in advance.



Nov 19 '05 #4

P: n/a
Thank you Kark. I tried it and it worked. Only after SyncLock , I needed to
have the Object name. If not, I got the error.

===============================
"Karl Seguin" <karl REMOVE @ REMOVE openmymind REMOVEMETOO . ANDME net>
wrote in message news:OF**************@TK2MSFTNGP14.phx.gbl...
SynchLock
objStreamWriter.WriteLIne(strLine)
end SynchLock

(don't put them on the same line).

Also, you probabably need to wrap the entire File.AppendText(LogFile) in
there...and you could use some exception handling:

Dim objStreamWriter as StreamWriter
Dim strLine as string= CurrYear & CurrMonth & CurrDay & CurrHour &
CurrMin & CurrSec & " " & radioFileUp.selectedValue & " " &
Session("UserID") & " " & Carrier & " " & fn & " " & fsize & " bytes "
SyncLock
try
objStreamWriter = File.AppendText(LogFile)
objStreamWriter.WriteLine(strLine)
finally
if not objStreamWriter is nothing then
objStreamWriter.Close()
end if
end try
End SyncLock
Finally, your code should be refactored...the If and Else have too much
repeated code (ie, the strLine, the WriteLine, the associated exception
handling and locking)...all that causes you is (a) more time to write it (b) more time to change it (c) more time to fix it (d) more likely to have bugs (e) more likely to introduce bugs....refactoring is your friend

karl


--
MY ASP.Net tutorials
http://www.openmymind.net/
"HNguyen" <bi********@yahoo.com> wrote in message
news:eE**************@TK2MSFTNGP10.phx.gbl...
Hi Karl,

I've tried to add SyncLock and EndLock. The code looks like this :

If aLogfile.Exists Then

Dim objStreamWriter as StreamWriter
objStreamWriter = File.AppendText(LogFile)
Dim strLine as string= CurrYear & CurrMonth & CurrDay &
CurrHour & CurrMin & CurrSec & " " & radioFileUp.selectedValue & " " &
Session("UserID") & " " & Carrier & " " & fn & " " & fsize & " bytes "

SyncLock objStreamWriter.WriteLine(strLine)
End SyncLock
objStreamWriter.Close()

Else

Dim objStreamWriter as StreamWriter = File.CreateText(LogFile)
Dim strLine as string= CurrYear & CurrMonth & CurrDay &
CurrHour & CurrMin & CurrSec & " " & radioFileUp.selectedValue & " " &
Session("UserID") & " " & Carrier & " " & fn & " " & fsize & " bytes "

SyncLock objStreamWriter.WriteLine(strLine)
End SyncLock
objStreamWriter.Close()

End If

I've got the error like this :

Compilation Error
Description: An error occurred during the compilation of a resource required
to service this request. Please review the following specific error

details
and modify your source code appropriately.

Compiler Error Message: BC30491: Expression does not produce a value.

Source Error:
Line 202: Dim strLine as string= CurrYear & CurrMonth & CurrDay &
CurrHour & CurrMin & CurrSec & " " & radioFileUp.selectedValue & " " &
Session("UserID") & " " & Carrier & " " & fn & " " & fsize & " bytes "
Line 203:
Line 204: SyncLock objStreamWriter.WriteLine(strLine)
Line 205: End SyncLock
Line 206: objStreamWriter.Close()

Any suggestions ??? Thanks.

====================================

"Karl Seguin" <karl REMOVE @ REMOVE openmymind REMOVEMETOO . ANDME net>
wrote in message news:OP**************@TK2MSFTNGP10.phx.gbl...
Yes...you can have a file lock condition. You'll need to serialize

access
to the code. I think in VB.Net you can wrap the offending code in a
SynchLock statement:

http://msdn.microsoft.com/library/de...tmSyncLock.asp

Also, why reinvent the wheel?
http://logging.apache.org/log4net/

Karl

--
MY ASP.Net tutorials
http://www.openmymind.net/
"HNguyen" <bi********@yahoo.com> wrote in message
news:%2******************@TK2MSFTNGP14.phx.gbl...
> Hi,
>
> I have a Web application in ASP.NET. My Application allows the users upload
> files into the server after checking their user names and passwords.

For
> each transaction, the Web program will write the information about user > name, filename upload, filesize, date and time of uploading into the log > file. (The name of the log file is constructed by Current Year and

Current
> Month in my program). Is there any problems with writing into the log file
> if there are multi-users access on the same page to upload files ????.
My
> program works OK with the code below, but I don't know if there is
any > problems when multi-users perform writing into the same log file at

the same
> time ??? Here is a part of my code to open the log file for editing
:
>
> 'WRITE LO LOG FILE
> Dim strFile as string= CurrYear & CurrMonth
> Dim LogFile As String = Server.MapPath("LOGS") & "\" & strFile

& > ".log"
>
> Dim aLogfile As FileInfo = New FileInfo(LogFile)
> If aLogfile.Exists Then
> Dim objStreamWriter as StreamWriter
> objStreamWriter = File.AppendText(LogFile)
> Dim strLine as string= CurrYear & CurrMonth & CurrDay &
> CurrHour & CurrMin & CurrSec & " " & radioFileUp.selectedValue & "
" & > Session("UserID") & " " & Carrier & " " & fn & " " & fsize & "
bytes
" > objStreamWriter.WriteLine(strLine)
> objStreamWriter.Close()
> Else
> Dim objStreamWriter as StreamWriter = File.CreateText(LogFile) > Dim strLine as string= CurrYear & CurrMonth & CurrDay &
> CurrHour & CurrMin & CurrSec & " " & radioFileUp.selectedValue & "
"
& > Session("UserID") & " " & Carrier & " " & fn & " " & fsize & "
bytes
" > objStreamWriter.WriteLine(strLine)
> objStreamWriter.Close()
> End If
>
> Please give me some advises. Do I need to change anything in my code

for
it
> ?. Thanks in advance.
>
>



Nov 19 '05 #5

This discussion thread is closed

Replies have been disabled for this discussion.