c#完成了先判断文件夹的可读和可写属性然后再拷贝文件的功能
来源:互联网 发布:dnf辅助网站源码 编辑:程序博客网 时间:2024/05/29 17:24
因为对操作系统层面的函数还不是很了解,所以在判断的时候的方式有点挫,但是还是把功能圆满的完成了,希望能对网友们有所帮助。
代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Windows.Forms;
using System.Security.AccessControl;
namespace CopyFileByCMD
{
class FileCopy
{
/// <summary>
/// 判断用户对文件夹是否有写入权限
/// </summary>
/// <param name="destFolder"></param>
/// <param name="message"></param>
/// <returns></returns>
public bool IfFolderCanWrite(string destFolder, out string message)
{
bool result = false;
bool canRead = true;
bool canWrite = false;
message = "文件夹不可以被写入!";
DirectorySecurity s = new DirectorySecurity(destFolder, AccessControlSections.Access);
if(!Directory.Exists(destFolder))
{
message="目标文件夹不存在";
MessageBox.Show(message);
return result;
}
else
{
//先判断当前用户对文件夹是否有可读权限
try
{
Directory.GetFiles(destFolder);
}
catch (Exception ex)
{
//没有可读权限
canRead = false;
}
finally
{
AuthorizationRuleCollection rules = s.GetAccessRules(true, false, typeof(System.Security.Principal.NTAccount));
//当权限都有的时候则count为0(测试得到的结果,暂时没能理解,觉得很挫)
if (rules.Count == 0)
{
result = true;
}
foreach (FileSystemAccessRule rule in rules)
{
//当只有canRead而没有canWrite,用户实际上是只有canWrite没有canRead(结果是反的...)
if (!rule.FileSystemRights.HasFlag(FileSystemRights.WriteData) && rule.FileSystemRights.HasFlag(FileSystemRights.ReadData))
{
result = true;
message = "文件夹可以被写入";
}
// 当canRead和canWrite都有的时候
else if (rule.FileSystemRights.HasFlag(FileSystemRights.WriteData) && rule.FileSystemRights.HasFlag(FileSystemRights.ReadData))
{
//当canRead为true说明是用户实际上两种权限都有则判断出有canWrite权限
if (canRead)
{
result = true;
}
}
}
}
}
return result;
}
public bool copyFile(string sourceFile, string destFolder)
{
bool result = true;
string message;
//判断文件夹是否可以被写入
if (IfFolderCanWrite(destFolder, out message))
{
string path = "copy " + sourceFile + " " + destFolder;
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = "cmd.exe ";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;
p.Start();
p.StandardInput.WriteLine(path);
p.StandardInput.WriteLine("exit ");
p.StandardOutput.ReadToEnd();
p.Close();
}
else
{
result = false;
}
return result;
}
}
}
- c#完成了先判断文件夹的可读和可写属性然后再拷贝文件的功能
- access判断文件是否存在,是否可读可写等
- IOS判断文件是否可读 可写 可执行
- 让div可编辑,设置标签的可读可写属性
- 数组的length属性可读可写,字符串的长度length属性不可以修改
- socket可读,可写的条件
- socket可读,可写的条件
- linux shell 编程2(if else 判断文章的可读、可写可执行)
- C语言文件操作 fopen, fclose, mkdir(打开关闭文件,建文件夹,判断文件是否存在可读或可写)
- C语言文件操作 fopen, fclose, mkdir(打开关闭文件,建文件夹,判断文件是否存在可读或可写)
- C语言文件操作 fopen, fclose, mkdir(打开关闭文件,建文件夹,判断文件是否存在可读或可写)
- C语言文件操作 fopen, fclose, mkdir(打开关闭文件,建文件夹,判断文件是否存在可读或可写)
- C语言文件操作 fopen, fclose, mkdir(打开关闭文件,建文件夹,判断文件是否存在可读或可写)
- C语言文件操作 fopen, fclose, mkdir(打开关闭文件,建文件夹,判断文件是否存在可读或可写)
- C语言文件操作 fopen, fclose, mkdir(打开关闭文件,建文件夹,判断文件是否存在可读或可写)
- 把一个文件夹下的文件先打包成一个tar文件,然后再用gzip压缩。
- DDR和PORT是 可读可写的,而PIN是只读的
- C# 去除文件和文件夹的只读属性
- apache 301重定向
- 第十三周上机项目四3选择排序
- android textview字儿数多于指定行数用省略号代替
- 基于堆实现的优先级队列:PriorityQueue 解决 Top K 问题
- java jdbc连接mysql
- c#完成了先判断文件夹的可读和可写属性然后再拷贝文件的功能
- 软件架构————编程中基本数据类型注意事项
- 杨辉三角
- linux 配置json
- UVA 10465 Homer Simpson
- 第13周项目3-成绩处理函数版
- mac地址转换为长整形
- 第13周项目1(3)-数组大折腾
- 常用HTML标签元素