[delphi/winapi] Verschillende volumes?

Pagina: 1
Acties:

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

Topicstarter
Ik heb al veel programma's gezien die op de een of andere manier wel files kunnen verplaatsen. Windows Commander kan het heel goed, en zelfs de Windows Explorer is er keen in. IMHO zijn dit de twee besten qua file management.

Maar beide bevatten ze een bug die ik in mij prog niet wil hebben. Stel, ik heb twee partities. De ene partitie is C:\ en de andere partitie heb ik in C:\test gemount (kan vanaf Windows 2000 met NTFS). Ga ik nu een grote file verplaatsen van C:\ naar C:\test, dan krijg ik geen progress indicator te zien, omdat de interface "denkt" dat alleen maar de filename in de MFT gewijzigd hoeft te worden, zoals bij een normale file move actie. Hetzelfde effect heb je als je bestanden in een gemounte volume in de prullenbak gooit. Dan verplaatst ie ze nml eerst naar de volume waarin ie gemount is (omdat die een prullenbak heeft).

Ik vroeg me af of hiervoor een controle te maken is. Volgens mij moet het mogelijk zijn om te controleren of twee paden op verschillende volumes staan, ook al is de drive letter gelijk.

FindFirstVolumeMountPoint en aanverwante functies zouden uitkomst bieden, maar om het helemaal fool-proof te maken, zou ik de volumes dus bij iedere file moeten opzoeken, omdat ze best kunnen veranderen tijdens het verplaatsen van files. Of is er een truuk om "volumes changes" toegestuurd te krijgen? (dus zoiets als WM_DISPLAYCHANGE voor veranderingen aan je scherm). Zijn er tweakers die hierin ervaring hebben/kunnen meedenken?

mochten er mensen zijn die gelijk gaan roepen dat ik eerst maar wat code moet posten... ik denk altijd eerst na en ga dan pas coden. Dus ik heb alleen nog maar een gedachtenspinsel

日本!🎌


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 00:12

Tomatoman

Fulltime prutser

Hoe Windows Commander het doet weet ik niet, maar de Explorer (en een heleboel andere programma's) gebruiken voor het kopiëren van bestanden de Shell API (shlapi.dll). Het voortgangsvenstertje dat je ziet, is geen onderdeel van Explorer, maar wordt met een API call (in dit geval SHFileOperation) opgeroepen. Die API call zorgt er ook voor dat het voortgangsvenstertje al dan niet verschijnt.

Wil je wat veranderen aan het standaardgedrag van SHFileOperation, dan zul je een copy hook handler moeten implementeren, bijvoorbeeld via de ICopyHook interface. Een handige Delphi-implementatie daarvoor is te vinden in Shell+. Daar kun je ook meer informatie vinden over copy hook handlers.

Een goede grap mag vrienden kosten.


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

Topicstarter
Ik wil juist de shell API helemaal niet gebruiken, omdat ik juist niks met die vervelende bugs te maken wil hebben. Ook is het mij veel te omslachtig geimplementeerd allemaal.

Daarom dacht ik om maar zelf routines te gaan maken die het wel goed doen.

日本!🎌


  • martijn_brinkers
  • Registratie: November 2001
  • Laatst online: 31-10-2025
Heb je wat aan:

ExpandUNCFileName
On Windows, ExpandUNCFileName returns a fully qualified path name using Universal Naming Convention for network files. For files on local disks, ExpandUNCFileName is equivalent to ExpandFileName. In a UNC file name, the drive prefix is replaced with the name of the network resource to which the drive is mapped. For example, if the working directory is J:\ourdir and drive J is mapped to \\ourserver\ourshare, ExpandUNCFileName('ourfile') returns "\\ourserver\ourshare\ourdir\ourfile".

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

Topicstarter
Uh nee, dit heeft niets met netwerken te maken... een gemapte netwerkshare is iets anders dan een gemounte volume ;)

日本!🎌