C#PathTooLongException을 해결하고 시스템 전체를 다시 썼습니다.IO

3458 단어
최근 회사의 파일 관리 시스템은 긴 파일 이름, 즉 260문자 상한선을 지원해야 하기 때문에 인터넷에 접속하여 관련 자료를 찾았고 외국의 한 소인이 쓴 dll를 찾았으며 기존 작가의 기초 위에서 우리가 실현해야 할 몇 가지 방법을 추가했다.추가된 방법은 다음과 같습니다.
만약 여러분들이 dll을 찾으려면 메일박스를 남겨주시거나 나중에 csdn에 업로드하겠습니다.
public static DirectorySecurity GetDirectorySecurity(string longname)
        {
            int length = 0;
            byte[] buffer;// = new byte[65536];
            bool ret = Win32Interop.GetFileSecurity(longname, (int)(SECURITY_INFORMATION.OWNER_SECURITY_INFORMATION | SECURITY_INFORMATION.GROUP_SECURITY_INFORMATION ), null, 0, out length);
            if (length > 0)
            {
                buffer = new byte[length];
                ret = Win32Interop.GetFileSecurity(longname, (int)(SECURITY_INFORMATION.OWNER_SECURITY_INFORMATION | SECURITY_INFORMATION.GROUP_SECURITY_INFORMATION), buffer, (uint)length, out length);
                DirectorySecurity pSD = new DirectorySecurity();
                pSD.SetSecurityDescriptorBinaryForm(buffer);
                return pSD;
            }
            else
            {
                return null;
            }
        }

        public static DirectorySecurity GetDirectorySecurity(string longname, AccessControlSections sec)
        {
            int length = 0;
            byte[] buffer;// = new byte[65536];
            bool ret = Win32Interop.GetFileSecurity(longname, (int)sec, null, 0, out length);
            if (length > 0)
            {
                buffer = new byte[length];
                ret = Win32Interop.GetFileSecurity(longname, (int)sec, buffer, (uint)length, out length);
                DirectorySecurity pSD = new DirectorySecurity();
                pSD.SetSecurityDescriptorBinaryForm(buffer);
                return pSD;
            }
            else
            {
                return null;
            }
        }

        public static FileSecurity GetFileSecurity(string longname)
        {
            int length = 0;
            byte[] buffer;// = new byte[65536];
            bool ret = Win32Interop.GetFileSecurity(longname, (int)(SECURITY_INFORMATION.OWNER_SECURITY_INFORMATION | SECURITY_INFORMATION.GROUP_SECURITY_INFORMATION), null, 0, out length);
            if (length > 0)
            {
                buffer = new byte[length];
                ret = Win32Interop.GetFileSecurity(longname, (int)(SECURITY_INFORMATION.OWNER_SECURITY_INFORMATION | SECURITY_INFORMATION.GROUP_SECURITY_INFORMATION), buffer, (uint)length, out length);
                FileSecurity pSD = new FileSecurity();
                pSD.SetSecurityDescriptorBinaryForm(buffer);
                return pSD;
            }
            else
            {
                return null;
            }
        }

        public static FileSecurity GetFileSecurity(string longname,AccessControlSections sec)
        {
            int length = 0;
            byte[] buffer;// = new byte[65536];
            bool ret = Win32Interop.GetFileSecurity(longname, (int)sec, null, 0, out length);
            if (length > 0)
            {
                buffer = new byte[length];
                ret = Win32Interop.GetFileSecurity(longname, (int)sec, buffer, (uint)length, out length);
                FileSecurity pSD = new FileSecurity();
                pSD.SetSecurityDescriptorBinaryForm(buffer);
                return pSD;
            }
            else
            {
                return null;
            }
        }

좋은 웹페이지 즐겨찾기