Udostępnij za pośrednictwem


CA2022: Unikaj niedokładnego odczytu za pomocą funkcji Stream.Read

Właściwości Wartość
Identyfikator reguły CA2022
Tytuł Unikaj niedokładnego odczytu za pomocą funkcji Stream.Read
Kategoria Niezawodność
Poprawka łamiąca lub nienaruszająca Niezgodność
Domyślnie włączone na platformie .NET 10 Jako ostrzeżenie
Zastosowane języki C# i Visual Basic

Przyczyna

Wywołanie metody Stream.Read lub Stream.ReadAsync jest wykonywane, a wartość zwracana nie jest zaznaczona.

Opis reguły

Stream.Read i Stream.ReadAsync może zwracać mniej bajtów niż żądane, co powoduje zawodny kod, jeśli wartość zwracana nie jest sprawdzana.

Jak naprawić naruszenia

Aby naprawić naruszenie, sprawdź wartość zwracaną (czyli całkowitą liczbę bajtów odczytanych w buforze) lub wywołaj Stream.ReadExactly albo Stream.ReadExactlyAsync zamiast tego.

Przykład

Poniższy fragment kodu przedstawia naruszenie CA2022 oraz sposób naprawy tego naruszenia.

void M1(Stream stream, byte[] buffer)
{
    // CA2022 violation.
    stream.Read(buffer, 0, buffer.Length);

    // Fix for the violation.
    stream.ReadExactly(buffer);
}
Shared Sub M(stream As Stream, buffer As Byte())
    ' CA2022 violation.
    stream.Read(buffer, 0, buffer.Length)

    ' Fix for the violation.
    stream.ReadExactly(buffer)
End Sub

Kiedy pomijać ostrzeżenia

Nie należy pomijać ostrzeżeń z tej reguły, ponieważ aplikacja może się zawieszać, jeśli nie naprawisz naruszeń.

Zobacz też