当Log这个文件夹点击右键后,在“属性”中--〉安全性页面中,把最后那个“写入”改为“拒绝”,怎么判断出来?
谢谢!!
16 个解决方案
#1
up
#2
使用捕捉异常的方法应该可以判断出来
当文家夹不能写入,而你又执行了写入操作时,肯定会引发一个异常
使用
try
{
//写入操作
}
catch(Exception ex)
{
throw new Exception("文件夹不能写入");
}
当文家夹不能写入,而你又执行了写入操作时,肯定会引发一个异常
使用
try
{
//写入操作
}
catch(Exception ex)
{
throw new Exception("文件夹不能写入");
}
#3
楼上的大哥,你的方法我试过。
try
{
DirectoryInfo di = new DirectoryInfo("C:\\Log");
FileSystemInfo[] s = di.GetFileSystemInfos();
if(!File.Exists("C:\\Log" + "\\" + "test.txt"))
{
File.Create("C:\\Log" + "\\" + "test.txt");
File.Delete("C:\\Log"+ "\\" + "test.txt");
}
}
catch(Exception)
{
...
}
在“拒绝写入”时,走到“File.Create("C:\\Log" + "\\" + "test.txt");”这一句就错了
但是,当我恢复原状,即把“拒绝写入”去掉后,
走到“File.Delete("C:\\Log"+ "\\" + "test.txt");”这一句居然会出错。
非常不解!
try
{
DirectoryInfo di = new DirectoryInfo("C:\\Log");
FileSystemInfo[] s = di.GetFileSystemInfos();
if(!File.Exists("C:\\Log" + "\\" + "test.txt"))
{
File.Create("C:\\Log" + "\\" + "test.txt");
File.Delete("C:\\Log"+ "\\" + "test.txt");
}
}
catch(Exception)
{
...
}
在“拒绝写入”时,走到“File.Create("C:\\Log" + "\\" + "test.txt");”这一句就错了
但是,当我恢复原状,即把“拒绝写入”去掉后,
走到“File.Delete("C:\\Log"+ "\\" + "test.txt");”这一句居然会出错。
非常不解!
#4
当然会出错,因为
DirectoryInfo di = new DirectoryInfo("C:\\Log");
di还保持着对 C:\Log 的使用,你只有在 销毁di后,才能对那个文件夹进行删除操作
所以如果上面的代码你注释掉 这一行,就可以通过了
DirectoryInfo di = new DirectoryInfo("C:\\Log");
di还保持着对 C:\Log 的使用,你只有在 销毁di后,才能对那个文件夹进行删除操作
所以如果上面的代码你注释掉 这一行,就可以通过了
#5
楼上的高手
我现在把
DirectoryInfo di = new DirectoryInfo("C:\\Log");
FileSystemInfo[] s = di.GetFileSystemInfos();
这两句去掉,改为:
try
{
if(!File.Exists("C:\\Log" + "\\" + "test.txt"))
{
File.Create("C:\\Log" + "\\" + "test.txt");
File.Delete("C:\\Log"+ "\\" + "test.txt");
}
}
catch(Exception e)
{
...
}
仍然当我把“拒绝写入”去掉后,
走到“File.Delete("C:\\Log"+ "\\" + "test.txt");”这一句出错。
出错的e.message是“进程对文件C:\Log\test.txt不能访问,这个文件被别的进程正在使用中”
我现在把
DirectoryInfo di = new DirectoryInfo("C:\\Log");
FileSystemInfo[] s = di.GetFileSystemInfos();
这两句去掉,改为:
try
{
if(!File.Exists("C:\\Log" + "\\" + "test.txt"))
{
File.Create("C:\\Log" + "\\" + "test.txt");
File.Delete("C:\\Log"+ "\\" + "test.txt");
}
}
catch(Exception e)
{
...
}
仍然当我把“拒绝写入”去掉后,
走到“File.Delete("C:\\Log"+ "\\" + "test.txt");”这一句出错。
出错的e.message是“进程对文件C:\Log\test.txt不能访问,这个文件被别的进程正在使用中”
#6
up
#7
up
#8
原因是File.Create返回了一个FileStream句柄占有文件,所以不能够删除,使用using将其用完释放即可。
MSDN:在 using 语句中创建一个实例,确保退出 using 语句时在对象上调用 Dispose。当到达 using 语句的末尾,或者如果在语句结束之前引发异常并且控制离开语句块,都可以退出 using 语句。
代码可以这样写:
using(File.Create("C:\\Log" + "\\" + "test.txt"))
{};
File.Delete("C:\\Log"+ "\\" + "test.txt");
win2K advanced server sp4, VS .net 2003 通过
判断文件夹访问错误,用异常可以。
MSDN:在 using 语句中创建一个实例,确保退出 using 语句时在对象上调用 Dispose。当到达 using 语句的末尾,或者如果在语句结束之前引发异常并且控制离开语句块,都可以退出 using 语句。
代码可以这样写:
using(File.Create("C:\\Log" + "\\" + "test.txt"))
{};
File.Delete("C:\\Log"+ "\\" + "test.txt");
win2K advanced server sp4, VS .net 2003 通过
判断文件夹访问错误,用异常可以。
#9
谢谢楼上这位高手,我试过了,确实可以。
不过我还有一个疑问,难道只能通过往里写文件捕捉异常来判断文件夹的权限问题吗?
可不可以直接用他的属性等等来判断呢?
比方说我试了
FileAttributes fa = File.GetAttributes("C:\\Log");
if((fa&FileAttributes.ReadOnly)!=0)
{
throw new Exception();
}
但是这种方法只能判断出“只读”属性,
能不能用类似的方法来判断权限问题呢?
不过我还有一个疑问,难道只能通过往里写文件捕捉异常来判断文件夹的权限问题吗?
可不可以直接用他的属性等等来判断呢?
比方说我试了
FileAttributes fa = File.GetAttributes("C:\\Log");
if((fa&FileAttributes.ReadOnly)!=0)
{
throw new Exception();
}
但是这种方法只能判断出“只读”属性,
能不能用类似的方法来判断权限问题呢?
#10
up
#11
建议:不要直接捕获 System.Exception,因为这样无论发生任何类型的异常都会被捕获,用 System.IO.IOException 或 System.Security.SecurityException 代替会好一些。
#12
up
#13
FileInfo fi = new FileInfo("d:\\1.txt");
MessageBox.Show( fi.FullName +" 的属性是:" + fi.Attributes.ToString() );
MessageBox.Show( fi.FullName +" 的属性是:" + fi.Attributes.ToString() );
#14
参见 MSDN:
ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfsystemsecuritypermissionsfileiopermissionclasstopic.htm
ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfsystemsecuritypermissionsfileiopermissionclasstopic.htm
#15
学习 EastenChild(东方之子,天高云淡) 的方法!
#16
应该是这一部分讲到,大家一起学习:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconcodeaccesssecurity.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconcodeaccesssecurity.asp
#1
up
#2
使用捕捉异常的方法应该可以判断出来
当文家夹不能写入,而你又执行了写入操作时,肯定会引发一个异常
使用
try
{
//写入操作
}
catch(Exception ex)
{
throw new Exception("文件夹不能写入");
}
当文家夹不能写入,而你又执行了写入操作时,肯定会引发一个异常
使用
try
{
//写入操作
}
catch(Exception ex)
{
throw new Exception("文件夹不能写入");
}
#3
楼上的大哥,你的方法我试过。
try
{
DirectoryInfo di = new DirectoryInfo("C:\\Log");
FileSystemInfo[] s = di.GetFileSystemInfos();
if(!File.Exists("C:\\Log" + "\\" + "test.txt"))
{
File.Create("C:\\Log" + "\\" + "test.txt");
File.Delete("C:\\Log"+ "\\" + "test.txt");
}
}
catch(Exception)
{
...
}
在“拒绝写入”时,走到“File.Create("C:\\Log" + "\\" + "test.txt");”这一句就错了
但是,当我恢复原状,即把“拒绝写入”去掉后,
走到“File.Delete("C:\\Log"+ "\\" + "test.txt");”这一句居然会出错。
非常不解!
try
{
DirectoryInfo di = new DirectoryInfo("C:\\Log");
FileSystemInfo[] s = di.GetFileSystemInfos();
if(!File.Exists("C:\\Log" + "\\" + "test.txt"))
{
File.Create("C:\\Log" + "\\" + "test.txt");
File.Delete("C:\\Log"+ "\\" + "test.txt");
}
}
catch(Exception)
{
...
}
在“拒绝写入”时,走到“File.Create("C:\\Log" + "\\" + "test.txt");”这一句就错了
但是,当我恢复原状,即把“拒绝写入”去掉后,
走到“File.Delete("C:\\Log"+ "\\" + "test.txt");”这一句居然会出错。
非常不解!
#4
当然会出错,因为
DirectoryInfo di = new DirectoryInfo("C:\\Log");
di还保持着对 C:\Log 的使用,你只有在 销毁di后,才能对那个文件夹进行删除操作
所以如果上面的代码你注释掉 这一行,就可以通过了
DirectoryInfo di = new DirectoryInfo("C:\\Log");
di还保持着对 C:\Log 的使用,你只有在 销毁di后,才能对那个文件夹进行删除操作
所以如果上面的代码你注释掉 这一行,就可以通过了
#5
楼上的高手
我现在把
DirectoryInfo di = new DirectoryInfo("C:\\Log");
FileSystemInfo[] s = di.GetFileSystemInfos();
这两句去掉,改为:
try
{
if(!File.Exists("C:\\Log" + "\\" + "test.txt"))
{
File.Create("C:\\Log" + "\\" + "test.txt");
File.Delete("C:\\Log"+ "\\" + "test.txt");
}
}
catch(Exception e)
{
...
}
仍然当我把“拒绝写入”去掉后,
走到“File.Delete("C:\\Log"+ "\\" + "test.txt");”这一句出错。
出错的e.message是“进程对文件C:\Log\test.txt不能访问,这个文件被别的进程正在使用中”
我现在把
DirectoryInfo di = new DirectoryInfo("C:\\Log");
FileSystemInfo[] s = di.GetFileSystemInfos();
这两句去掉,改为:
try
{
if(!File.Exists("C:\\Log" + "\\" + "test.txt"))
{
File.Create("C:\\Log" + "\\" + "test.txt");
File.Delete("C:\\Log"+ "\\" + "test.txt");
}
}
catch(Exception e)
{
...
}
仍然当我把“拒绝写入”去掉后,
走到“File.Delete("C:\\Log"+ "\\" + "test.txt");”这一句出错。
出错的e.message是“进程对文件C:\Log\test.txt不能访问,这个文件被别的进程正在使用中”
#6
up
#7
up
#8
原因是File.Create返回了一个FileStream句柄占有文件,所以不能够删除,使用using将其用完释放即可。
MSDN:在 using 语句中创建一个实例,确保退出 using 语句时在对象上调用 Dispose。当到达 using 语句的末尾,或者如果在语句结束之前引发异常并且控制离开语句块,都可以退出 using 语句。
代码可以这样写:
using(File.Create("C:\\Log" + "\\" + "test.txt"))
{};
File.Delete("C:\\Log"+ "\\" + "test.txt");
win2K advanced server sp4, VS .net 2003 通过
判断文件夹访问错误,用异常可以。
MSDN:在 using 语句中创建一个实例,确保退出 using 语句时在对象上调用 Dispose。当到达 using 语句的末尾,或者如果在语句结束之前引发异常并且控制离开语句块,都可以退出 using 语句。
代码可以这样写:
using(File.Create("C:\\Log" + "\\" + "test.txt"))
{};
File.Delete("C:\\Log"+ "\\" + "test.txt");
win2K advanced server sp4, VS .net 2003 通过
判断文件夹访问错误,用异常可以。
#9
谢谢楼上这位高手,我试过了,确实可以。
不过我还有一个疑问,难道只能通过往里写文件捕捉异常来判断文件夹的权限问题吗?
可不可以直接用他的属性等等来判断呢?
比方说我试了
FileAttributes fa = File.GetAttributes("C:\\Log");
if((fa&FileAttributes.ReadOnly)!=0)
{
throw new Exception();
}
但是这种方法只能判断出“只读”属性,
能不能用类似的方法来判断权限问题呢?
不过我还有一个疑问,难道只能通过往里写文件捕捉异常来判断文件夹的权限问题吗?
可不可以直接用他的属性等等来判断呢?
比方说我试了
FileAttributes fa = File.GetAttributes("C:\\Log");
if((fa&FileAttributes.ReadOnly)!=0)
{
throw new Exception();
}
但是这种方法只能判断出“只读”属性,
能不能用类似的方法来判断权限问题呢?
#10
up
#11
建议:不要直接捕获 System.Exception,因为这样无论发生任何类型的异常都会被捕获,用 System.IO.IOException 或 System.Security.SecurityException 代替会好一些。
#12
up
#13
FileInfo fi = new FileInfo("d:\\1.txt");
MessageBox.Show( fi.FullName +" 的属性是:" + fi.Attributes.ToString() );
MessageBox.Show( fi.FullName +" 的属性是:" + fi.Attributes.ToString() );
#14
参见 MSDN:
ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfsystemsecuritypermissionsfileiopermissionclasstopic.htm
ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfsystemsecuritypermissionsfileiopermissionclasstopic.htm
#15
学习 EastenChild(东方之子,天高云淡) 的方法!
#16
应该是这一部分讲到,大家一起学习:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconcodeaccesssecurity.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconcodeaccesssecurity.asp