windows - Hvad sker der, når 'file\_with\_invalid\_chars: <? > .xt' overføres til MFC CFile-klassen?

Indlæg af Hanne Mølgaard Plasc

Problem



Bemærk: Nødvendigt at redigere titlen og spørgsmålet, som jeg oprindeligt troede, at problemet var med ::CreateFile[W] - men det viser sig, at fejlen kun sker på XP, når jeg bruger MFCs Cfile klasse .


Jeg er lidt forvirret af opførelsen af ​​CFile::Open(...) (på Win7/64bit), når jeg sender filnavnet file\_with\_invalid\_chars:<?>.txt til denne funktion for at anmode om oprettelse af filen.


På min Windows XP-boks fejler opkaldet.


På min Win7/64-boks lykkes opkaldet og opretter en fil med navnet file\_with\_invalid\_chars.


Hvad sker der?

Bedste reference


Jeg gætter på det, der skaber en alternativ datastrøm. Synes mærkeligt, at det ville mislykkes på XP, selvom. Dokumentationen siger, at tegn, der er lovlige for et filnavn, også er lovlige for et streamnavn, selvom det ikke nødvendigvis betyder, at invers er sandt. Måske Windows 7 understøtter < and> i streamnavne, og Windows XP gør det ikke. [11]

Andre referencer 1


Det viser sig, at dette skyldes et fejlfinding (?) I shlwapi.dll -


MFC'ens CFile klasse gør nogle interne behandlinger på filnavnet, og tilfældigvis kalder funktionen PathStripToRoot. [12]


Denne funktion findes i Shlwapi.dll, og Win7 leveres med en nyere version end Windows XP.


Versionen i Windows XP virker tilsyneladende ikke korrekt med filstier, der indeholder ADS-kolon-adskilte streamnavne.


Eksempel:



  • På XP PathStripToRoot(L"C:\temp\file.txt:stream"); gives strengen C: empfile.txt:, som er ukorrekt og fører til en fejlretning fra CFile::Open

  • På Win7 giver det samme opkald den egentlige rod C:.