windows - Håndtering af mulige fejl med netværksdrev fil I/O

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at lave fil I/O over et netværksdrev (sandsynligvis over et WAN eller VPN) så pålideligt som muligt for en indbygget C ++ Windows app ...


Hvad er de mulige fejlbetingelser, som jeg skal kunne klare?


Hvordan kan jeg simulere disse fejlbetingelser ved test?


Hvordan får jeg detaljerede oplysninger om en bestemt fejl? For eksempel, hvis fopen() fejler, fortæller errno mig alt, hvad jeg behøver at vide, eller skal jeg få værdien GetLastError()?


Hvordan adskiller jeg pålideligt mellem 'netværksdrevadgang fuldt funktionel, men filen eksisterer ikke' og forskellige problemer med netværket eller serveren?


En særlig fejltilstand, som jeg har bemærket på mit skrivebord (ikke specifikt for den app, vi udvikler), er, at det første forsøg på at få adgang til en fil på et netværksdrev mislykkes, men det forårsager formodentlig, at drevet bliver tilsluttet igen i baggrunden, fordi efterfølgende forbindelser fungerer. Jeg ved ikke hvad der forårsager dette. Dette er et eksempel på den slags fejltilstand, som jeg vil håndtere korrekt.


EDIT: Dette er et legacy distribueret program, der bruger filer på netværksaktier til kommunikation mellem noder. Nogle noder kan være uden opsyn, så det er ikke muligt at sende fejlen til slutbrugeren. Det langsigtede mål er at skifte til en bedre protokol, men på kort sigt vil jeg gerne gøre filen I/O så pålidelig som muligt.

Bedste reference


Jeg tror, ​​at du nærmer dig dette fra et forkert perspektiv. Der er lidt, man kan gøre i selve applikationen for at forbedre, hvad der egentlig er et problem med netværksfilsystemdrivere, måske undtagen at implementere den netværksbaserede I/O selv. Når det er sagt, bør du hellere vælge et passende netværksfilsystem til dine behov. Se på dette på Wikipedia. [4]


Generelt skal din ansøgning opføre sig som filen er lokalt lagret. Forsøg ikke at håndtere netværksproblemer. Men hvis dit valg af et netværksfilsystem er godt, kan disse problemer automatisk mindskes.


Så jeg siger, at du skal afregne med errno ved fejl. Måske tilbagekaldes det lokale opslag, hvis der ikke skrives en fjernfil (hvis det netværksbaserede filsystem ikke håndterer det selv).