파일 시스템에 존재하지 않는 폴더 새로 고침

무겐

내 셸 확장에는 파일 시스템에 실제로 존재하지 않지만 사용자에게만 나타나는 폴더가 있습니다.

해당 폴더의 내용이 변경되면 새로 고침하고 싶습니다. 현재 일반 폴더에 대해 수행하는 것과 동일한 방법으로 수행합니다.

Win32.SHChangeNotify(SHCNE_UPDATEDIR, SHCNF_IDLIST | SHCNF_FLUSH, PIDL, IntPtr.Zero);

반면 PIDL에 의해 요구되는 쉘 폴더 ID의 목록입니다 SHCNF_IDLIST.

문제는 탐색기가 내 존재하지 않는 폴더를 처리하지 않는다는 것입니다. 새로 고치는 대신 루트 폴더로 다시 보냅니다.

PIDL이전에 언급했듯이이 메커니즘이 기존 폴더에 대해 작동하기 때문에 내가 올바르게 구성한다는 것을 알고 있습니다.

핸들러를 SHChangeNotify어떻게 재정의 할 수 있습니까? 아니면 새로 고침을 호출하는 더 좋은 방법이 있습니까?

편집하다:

PIDL생성 방법 :

    IntPtr GetPIDL(IFolderItem target)
    {
        Stack stack = new Stack(5);
        IntPtr data = IntPtr.Zero;

        byte[] rootPIDL = null;

        IFolderItem curr = target;
        while (curr != null)
        {
            if (curr.rootPIDL != null)
            {
                rootPIDL = curr.rootPIDL;
            }
            else
            {
                data = curr.SerializeInt();
                stack.Push(data);
            }

            curr = curr.ParentFolder;
        }

        if (rootPIDL == null && stack.Count == 0)
            return IntPtr.Zero;

        object[] x = stack.ToArray();

        IntPtr[] pidls = null;

        int count = stack.Count;
        if (count > 0)
        {
            pidls = new IntPtr[stack.Count];
            for (int i = 0; i < count; i++)
            {
                pidls[i] = (IntPtr)stack.Pop();
            }
        }

        return CreatePIDL(rootPIDL, pidls);
    }

CreatePIDL구현 :

        internal unsafe static IntPtr CreatePIDL(byte[] rootPIDL,IntPtr[] pidls)
        {
            int headerSize = Marshal.SizeOf(typeof(ushort));
            int totalSize = headerSize;
            if (rootPIDL != null)
                totalSize += rootPIDL.Length - headerSize;

            if (pidls!=null && pidls.Length > 0)
            {
                foreach (IntPtr data in pidls)
                {
                    totalSize += PIDLSize(data);
                }
            }

            IntPtr ret = PIDLAlloc(totalSize);
            IntPtr currPos = ret;

            if(rootPIDL!=null)
            {
                Marshal.Copy(rootPIDL, 0, currPos, rootLPIFQ.Length - headerSize);
                currPos = Win32.AdvancePtr(currPos, rootLPIFQ.Length - headerSize);
            }

            if (pidls != null && pidls.Length>0)
            {
                foreach (IntPtr data in pidls)
                {
                    int dataLength = PIDLSize(data);
                    Win32.CopyMemory(currPos, data, dataLength);
                    currPos = Win32.AdvancePtr(currPos, dataLength);
                }
           }
           Marshal.WriteInt16(currPos, (short)0);

            return ret;
        }

        internal static unsafe int PIDLSize(IntPtr ptr)
        {
            return (int) (*((ushort*)ptr));
        }

        internal unsafe static IntPtr PIDLAlloc(int size)
        {
            IntPtr ret = Marshal.AllocCoTaskMem(size);
            if (ret == IntPtr.Zero)
                throw new OutOfMemoryException();

            return ret;
        }
무겐

해결 방법을 찾았습니다. 예쁘지도 최적도 아니지만 잘 작동합니다.

로 알림을 호출하는 대신 SHCNE_UPDATEDIR다음 세 가지 알림을 순서대로 실행합니다.

Win32.SHChangeNotify(SHCNE_MKDIR, SHCNF_IDLIST | SHCNF_FLUSH, PIDL, IntPtr.Zero);
Win32.SHChangeNotify(SHCNE_CREATE, SHCNF_IDLIST | SHCNF_FLUSH, PIDL, IntPtr.Zero);
Win32.SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST | SHCNF_FLUSH, PIDL, IntPtr.Zero);

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Node.js + AWS S3 : 새 파일 업로드 및 존재하지 않는 경우 새 폴더 생성

분류에서Dev

django 템플릿에서 js 파일 새로 고침 중지

분류에서Dev

새로 고침하지 않고 동일한 페이지를 새로 고침 하시겠습니까?

분류에서Dev

폴더의 파일이 다른 폴더의 다른 이름으로 존재하는지 확인

분류에서Dev

시스템 새로 고침을 수행하면 이러한 폴더가 유지됩니까?

분류에서Dev

목표 c를 사용하여 해당 폴더에 이미 존재하지 않는 파일 이름으로 파일 만들기

분류에서Dev

동일한 경로는 파일에서 잘 작동하고 폴더에서는 작동하지 않습니다.

분류에서Dev

다운로드 한 파일은 폴더를 새로 고칠 때까지 표시되지 않습니다.

분류에서Dev

새로 고침하지 않고 PHP 파일 제출

분류에서Dev

존재하지 않는 요청 (파일 \ 폴더)을 루트 도메인 페이지 404로 리디렉션

분류에서Dev

양식에서 서버로 파일을 업로드하고 새 폴더에 저장하는 방법

분류에서Dev

Windows 공유 폴더 마운트 오류 : 시스템에서 지원하지 않는 cifs 파일 시스템

분류에서Dev

파일과 같은 이름의 폴더를 생성하고 파일을 폴더로 옮기는 스크립트

분류에서Dev

기존 파일 시스템 (CentOS)의 폴더를 가리키는 새 마운트 지점을 만드는 방법

분류에서Dev

Windows 문서 폴더에 존재하지 않는 파일

분류에서Dev

새 폴더를 만들지 않고 이름을 기반으로 파일을 이동하는 배치 파일

분류에서Dev

재부팅하지 않고 아이콘 캐시 새로 고침

분류에서Dev

php가 존재하지 않는 경우 다른 폴더에 txt 파일 생성

분류에서Dev

C ++에서 존재하지 않는 폴더에 파일 쓰기

분류에서Dev

각 파일 / 폴더를 새로 생성 된 폴더에 복사하는 Applescript

분류에서Dev

각 파일 / 폴더를 새로 생성 된 폴더에 복사하는 Applescript

분류에서Dev

존재하지 않는 폴더의 URL을 mod_rewrite의 파일로 다시 쓰는 방법

분류에서Dev

각 폴더 및 하위 폴더에있는 파일 수를 세고 별도로 표시

분류에서Dev

폴더를 열지 않고 파일을 폴더로 드래그

분류에서Dev

게시하지 않고 페이지 새로 고침 POST 새로 고침 암호 재설정

분류에서Dev

Linux 명령 줄은 다른 폴더에 존재하지 않는 파일을 재귀 적으로 제거합니다.

분류에서Dev

ansible : 파일이 존재하지 않고 소스가 더 새로운 경우 쉘 실행

분류에서Dev

Python : * .dat 파일을 * .csv 파일로 새 폴더에 저장하는 방법

분류에서Dev

S3 폴더에서 파일을 다운로드하고 폴더를 생성하는 셸 스크립트

Related 관련 기사

  1. 1

    Node.js + AWS S3 : 새 파일 업로드 및 존재하지 않는 경우 새 폴더 생성

  2. 2

    django 템플릿에서 js 파일 새로 고침 중지

  3. 3

    새로 고침하지 않고 동일한 페이지를 새로 고침 하시겠습니까?

  4. 4

    폴더의 파일이 다른 폴더의 다른 이름으로 존재하는지 확인

  5. 5

    시스템 새로 고침을 수행하면 이러한 폴더가 유지됩니까?

  6. 6

    목표 c를 사용하여 해당 폴더에 이미 존재하지 않는 파일 이름으로 파일 만들기

  7. 7

    동일한 경로는 파일에서 잘 작동하고 폴더에서는 작동하지 않습니다.

  8. 8

    다운로드 한 파일은 폴더를 새로 고칠 때까지 표시되지 않습니다.

  9. 9

    새로 고침하지 않고 PHP 파일 제출

  10. 10

    존재하지 않는 요청 (파일 \ 폴더)을 루트 도메인 페이지 404로 리디렉션

  11. 11

    양식에서 서버로 파일을 업로드하고 새 폴더에 저장하는 방법

  12. 12

    Windows 공유 폴더 마운트 오류 : 시스템에서 지원하지 않는 cifs 파일 시스템

  13. 13

    파일과 같은 이름의 폴더를 생성하고 파일을 폴더로 옮기는 스크립트

  14. 14

    기존 파일 시스템 (CentOS)의 폴더를 가리키는 새 마운트 지점을 만드는 방법

  15. 15

    Windows 문서 폴더에 존재하지 않는 파일

  16. 16

    새 폴더를 만들지 않고 이름을 기반으로 파일을 이동하는 배치 파일

  17. 17

    재부팅하지 않고 아이콘 캐시 새로 고침

  18. 18

    php가 존재하지 않는 경우 다른 폴더에 txt 파일 생성

  19. 19

    C ++에서 존재하지 않는 폴더에 파일 쓰기

  20. 20

    각 파일 / 폴더를 새로 생성 된 폴더에 복사하는 Applescript

  21. 21

    각 파일 / 폴더를 새로 생성 된 폴더에 복사하는 Applescript

  22. 22

    존재하지 않는 폴더의 URL을 mod_rewrite의 파일로 다시 쓰는 방법

  23. 23

    각 폴더 및 하위 폴더에있는 파일 수를 세고 별도로 표시

  24. 24

    폴더를 열지 않고 파일을 폴더로 드래그

  25. 25

    게시하지 않고 페이지 새로 고침 POST 새로 고침 암호 재설정

  26. 26

    Linux 명령 줄은 다른 폴더에 존재하지 않는 파일을 재귀 적으로 제거합니다.

  27. 27

    ansible : 파일이 존재하지 않고 소스가 더 새로운 경우 쉘 실행

  28. 28

    Python : * .dat 파일을 * .csv 파일로 새 폴더에 저장하는 방법

  29. 29

    S3 폴더에서 파일을 다운로드하고 폴더를 생성하는 셸 스크립트

뜨겁다태그

보관