请问当一个文件夹的安全属性中“写入”的属性改为“拒绝”,如何能判断出来!!急!!

时间:2022-09-21 19:11:34
DirectoryInfo di = new DirectoryInfo("C:\\Log");

当Log这个文件夹点击右键后,在“属性”中--〉安全性页面中,把最后那个“写入”改为“拒绝”,怎么判断出来?

谢谢!!

16 个解决方案

#1


up

#2


使用捕捉异常的方法应该可以判断出来

当文家夹不能写入,而你又执行了写入操作时,肯定会引发一个异常

使用
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");”这一句居然会出错。

非常不解!

#4


当然会出错,因为
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不能访问,这个文件被别的进程正在使用中”

#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 通过


判断文件夹访问错误,用异常可以。

#9


谢谢楼上这位高手,我试过了,确实可以。

不过我还有一个疑问,难道只能通过往里写文件捕捉异常来判断文件夹的权限问题吗?

可不可以直接用他的属性等等来判断呢?
比方说我试了
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() );

#14


参见 MSDN:
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

#1


up

#2


使用捕捉异常的方法应该可以判断出来

当文家夹不能写入,而你又执行了写入操作时,肯定会引发一个异常

使用
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");”这一句居然会出错。

非常不解!

#4


当然会出错,因为
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不能访问,这个文件被别的进程正在使用中”

#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 通过


判断文件夹访问错误,用异常可以。

#9


谢谢楼上这位高手,我试过了,确实可以。

不过我还有一个疑问,难道只能通过往里写文件捕捉异常来判断文件夹的权限问题吗?

可不可以直接用他的属性等等来判断呢?
比方说我试了
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() );

#14


参见 MSDN:
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