GZipStream Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Poskytuje metody a vlastnosti používané ke kompresi a dekompresi datových proudů pomocí specifikace formátu dat GZip.
public ref class GZipStream : System::IO::Stream
public class GZipStream : System.IO.Stream
type GZipStream = class
inherit Stream
Public Class GZipStream
Inherits Stream
- Dědičnost
- Dědičnost
Příklady
Následující příklad ukazuje, jak pomocí GZipStream třídy komprimovat a dekomprimovat adresář souborů.
using System;
using System.IO;
using System.IO.Compression;
public class FileCompressionModeExample
{
private const string Message = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
private const string OriginalFileName = "original.txt";
private const string CompressedFileName = "compressed.gz";
private const string DecompressedFileName = "decompressed.txt";
public static void Run()
{
CreateFileToCompress();
CompressFile();
DecompressFile();
PrintResults();
DeleteFiles();
/*
Output:
The original file 'original.txt' is 445 bytes. Contents: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
The compressed file 'compressed.gz' is 283 bytes.
The decompressed file 'decompressed.txt' is 445 bytes. Contents: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
*/
}
private static void CreateFileToCompress() => File.WriteAllText(OriginalFileName, Message);
private static void CompressFile()
{
using FileStream originalFileStream = File.Open(OriginalFileName, FileMode.Open);
using FileStream compressedFileStream = File.Create(CompressedFileName);
using var compressor = new GZipStream(compressedFileStream, CompressionMode.Compress);
originalFileStream.CopyTo(compressor);
}
private static void DecompressFile()
{
using FileStream compressedFileStream = File.Open(CompressedFileName, FileMode.Open);
using FileStream outputFileStream = File.Create(DecompressedFileName);
using var decompressor = new GZipStream(compressedFileStream, CompressionMode.Decompress);
decompressor.CopyTo(outputFileStream);
}
private static void PrintResults()
{
long originalSize = new FileInfo(OriginalFileName).Length;
long compressedSize = new FileInfo(CompressedFileName).Length;
long decompressedSize = new FileInfo(DecompressedFileName).Length;
Console.WriteLine($"The original file '{OriginalFileName}' is {originalSize} bytes. Contents: \"{File.ReadAllText(OriginalFileName)}\"");
Console.WriteLine($"The compressed file '{CompressedFileName}' is {compressedSize} bytes.");
Console.WriteLine($"The decompressed file '{DecompressedFileName}' is {decompressedSize} bytes. Contents: \"{File.ReadAllText(DecompressedFileName)}\"");
}
private static void DeleteFiles()
{
File.Delete(OriginalFileName);
File.Delete(CompressedFileName);
File.Delete(DecompressedFileName);
}
}
Imports System
Imports System.IO
Imports System.IO.Compression
Public Class FileCompressionModeExample
Private Const Message As String = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
Private Const OriginalFileName As String = "original.txt"
Private Const CompressedFileName As String = "compressed.gz"
Private Const DecompressedFileName As String = "decompressed.txt"
Public Shared Sub Main()
CreateFileToCompress()
CompressFile()
DecompressFile()
PrintResults()
DeleteFiles()
' Output:
' The original file 'original.txt' weighs 445 bytes. Contents: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
' The compressed file 'compressed.gz' weighs 283 bytes.
' The decompressed file 'decompressed.txt' weighs 445 bytes. Contents: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
End Sub
Private Shared Sub CreateFileToCompress()
File.WriteAllText(OriginalFileName, Message)
End Sub
Private Shared Sub CompressFile()
Using originalFileStream As FileStream = File.Open(OriginalFileName, FileMode.Open)
Using compressedFileStream As FileStream = File.Create(CompressedFileName)
Using compressor = New GZipStream(compressedFileStream, CompressionMode.Compress)
originalFileStream.CopyTo(compressor)
End Using
End Using
End Using
End Sub
Private Shared Sub DecompressFile()
Using compressedFileStream As FileStream = File.Open(CompressedFileName, FileMode.Open)
Using outputFileStream As FileStream = File.Create(DecompressedFileName)
Using decompressor = New GZipStream(compressedFileStream, CompressionMode.Decompress)
decompressor.CopyTo(outputFileStream)
End Using
End Using
End Using
End Sub
Private Shared Sub PrintResults()
Dim originalSize As Long = New FileInfo(OriginalFileName).Length
Dim compressedSize As Long = New FileInfo(CompressedFileName).Length
Dim decompressedSize As Long = New FileInfo(DecompressedFileName).Length
Console.WriteLine($"The original file '{OriginalFileName}' weighs {originalSize} bytes. Contents: ""{File.ReadAllText(OriginalFileName)}""")
Console.WriteLine($"The compressed file '{CompressedFileName}' weighs {compressedSize} bytes.")
Console.WriteLine($"The decompressed file '{DecompressedFileName}' weighs {decompressedSize} bytes. Contents: ""{File.ReadAllText(DecompressedFileName)}""")
End Sub
Private Shared Sub DeleteFiles()
File.Delete(OriginalFileName)
File.Delete(CompressedFileName)
File.Delete(DecompressedFileName)
End Sub
End Class
Poznámky
Tato třída představuje datový formát gzip, který používá standardní algoritmus pro bezztrátovou kompresi a dekompresi souborů. Formát obsahuje hodnotu kontroly cyklické redundance pro detekci poškození dat. Datový formát gzip používá stejný algoritmus jako DeflateStream třída, ale může být rozšířen o použití jiných formátů komprese. Formát lze snadno implementovat způsobem, na který se nevztahují patenty.
Počínaje rozhraním .NET Framework 4.5 DeflateStream třída používá pro kompresi knihovnu zlib. V důsledku toho poskytuje lepší algoritmus komprese a ve většině případů menší komprimovaný soubor, než poskytuje v dřívějších verzích rozhraní .NET Framework.
Komprimované GZipStream objekty zapsané do souboru s příponou .gz lze dekomprimovat pomocí mnoha běžných nástrojů pro kompresi. Tato třída však ze své podstaty neposkytuje funkce pro přidávání souborů do archivů zip nebo jejich extrahování.
Funkce komprese v DeflateStream systému a GZipStream je vystavena jako datový proud. Data se čtou po bajtech, takže není možné provést více průchodů, aby bylo možné určit nejlepší metodu pro kompresi celých souborů nebo velkých bloků dat. Třídy DeflateStream a GZipStream se nejlépe používají v nekomprimovaných zdrojích dat. Pokud jsou zdrojová data již komprimovaná, může použití těchto tříd ve skutečnosti zvětšit velikost datového proudu.
Poznámky pro dědice
Když dědíte z GZipStream, musíte přepsat následující členy: CanSeek, CanWritea CanRead.
Konstruktory
GZipStream(Stream, CompressionLevel) |
Inicializuje novou instanci GZipStream třídy pomocí zadaného streamu a úrovně komprese. |
GZipStream(Stream, CompressionLevel, Boolean) |
Inicializuje novou instanci GZipStream třídy pomocí zadaného streamu a úrovně komprese a volitelně ponechá datový proud otevřený. |
GZipStream(Stream, CompressionMode) |
Inicializuje novou instanci GZipStream třídy pomocí zadaného streamu a režimu komprese. |
GZipStream(Stream, CompressionMode, Boolean) |
Inicializuje novou instanci GZipStream třídy pomocí zadaného streamu a režimu komprese a volitelně ponechá datový proud otevřený. |
Vlastnosti
BaseStream |
Získá odkaz na podkladový datový proud. |
CanRead |
Získá hodnotu označující, zda datový proud podporuje čtení při dekompresi souboru. |
CanSeek |
Získá hodnotu označující, zda datový proud podporuje hledání. |
CanTimeout |
Získá hodnotu, která určuje, zda aktuální datový proud může vypršení časového limitu. (Zděděno od Stream) |
CanWrite |
Získá hodnotu označující, zda datový proud podporuje zápis. |
Length |
Tato vlastnost není podporována a vždy vyvolá NotSupportedException. |
Position |
Tato vlastnost není podporována a vždy vyvolá NotSupportedException. |
ReadTimeout |
Získá nebo nastaví hodnotu v milisekundách, která určuje, jak dlouho se datový proud pokusí číst před vypršením časového limitu. (Zděděno od Stream) |
WriteTimeout |
Získá nebo nastaví hodnotu v milisekundách, která určuje, jak dlouho se datový proud pokusí zapisovat před vypršením časového limitu. (Zděděno od Stream) |
Metody
BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) |
Zahájí asynchronní operaci čtení. (Zvažte místo toho použití ReadAsync(Byte[], Int32, Int32) metody .) |
BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) |
Zahájí asynchronní operaci čtení. (Zvažte místo toho použití ReadAsync(Byte[], Int32, Int32) .) (Zděděno od Stream) |
BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object) |
Zahájí asynchronní operaci zápisu. (Zvažte místo toho použití WriteAsync(Byte[], Int32, Int32) metody .) |
BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object) |
Zahájí asynchronní operaci zápisu. (Zvažte místo toho použití WriteAsync(Byte[], Int32, Int32) .) (Zděděno od Stream) |
Close() |
Zavře aktuální datový proud a uvolní všechny prostředky (například sokety a popisovače souborů) přidružené k aktuálnímu datovému proudu. Místo volání této metody se ujistěte, že datový proud je správně odstraněn. (Zděděno od Stream) |
CopyTo(Stream) |
Přečte bajty z aktuálního datového proudu a zapíše je do jiného datového proudu. Obě pozice datových proudů se posouvají podle počtu zkopírovaných bajtů. (Zděděno od Stream) |
CopyTo(Stream, Int32) |
Načte bajty z aktuálního datového proudu GZip a zapíše je do jiného datového proudu s použitím zadané velikosti vyrovnávací paměti. |
CopyTo(Stream, Int32) |
Načte bajty z aktuálního datového proudu a zapíše je do jiného datového proudu s použitím zadané velikosti vyrovnávací paměti. Obě pozice datových proudů se posouvají podle počtu zkopírovaných bajtů. (Zděděno od Stream) |
CopyToAsync(Stream) |
Asynchronně čte bajty z aktuálního datového proudu a zapisuje je do jiného datového proudu. Obě pozice datových proudů se posouvají podle počtu zkopírovaných bajtů. (Zděděno od Stream) |
CopyToAsync(Stream, CancellationToken) |
Asynchronně přečte bajty z aktuálního datového proudu a zapíše je do jiného datového proudu pomocí zadaného tokenu zrušení. Obě pozice datových proudů se posouvají podle počtu zkopírovaných bajtů. (Zděděno od Stream) |
CopyToAsync(Stream, Int32) |
Asynchronně čte bajty z aktuálního datového proudu a zapisuje je do jiného datového proudu pomocí zadané velikosti vyrovnávací paměti. Obě pozice datových proudů se posouvají podle počtu zkopírovaných bajtů. (Zděděno od Stream) |
CopyToAsync(Stream, Int32, CancellationToken) |
Asynchronně čte bajty z aktuálního datového proudu GZip a zapisuje je do jiného datového proudu pomocí zadané velikosti vyrovnávací paměti. |
CopyToAsync(Stream, Int32, CancellationToken) |
Asynchronně čte bajty z aktuálního datového proudu a zapisuje je do jiného datového proudu pomocí zadané velikosti vyrovnávací paměti a tokenu zrušení. Obě pozice datových proudů se posouvají podle počtu zkopírovaných bajtů. (Zděděno od Stream) |
CreateObjRef(Type) |
Vytvoří objekt, který obsahuje všechny relevantní informace potřebné k vygenerování proxy sloužící ke komunikaci se vzdáleným objektem. (Zděděno od MarshalByRefObject) |
CreateWaitHandle() |
Zastaralé.
Zastaralé.
Zastaralé.
Přidělí WaitHandle objekt. (Zděděno od Stream) |
Dispose() |
Uvolní všechny prostředky používané nástrojem Stream. (Zděděno od Stream) |
Dispose(Boolean) |
Uvolní nespravované prostředky používané nástrojem GZipStream a volitelně uvolní spravované prostředky. |
DisposeAsync() |
Asynchronně uvolní nespravované prostředky, které GZipStreampoužívá . |
DisposeAsync() |
Asynchronně uvolní nespravované prostředky, které Streampoužívá . (Zděděno od Stream) |
EndRead(IAsyncResult) |
Čeká na dokončení čekajícího asynchronního čtení. (Zvažte místo toho použití ReadAsync(Byte[], Int32, Int32) metody .) |
EndRead(IAsyncResult) |
Čeká na dokončení čekajícího asynchronního čtení. (Zvažte místo toho použití ReadAsync(Byte[], Int32, Int32) .) (Zděděno od Stream) |
EndWrite(IAsyncResult) |
Zpracovává konec asynchronní operace zápisu. (Zvažte místo toho použití WriteAsync(Byte[], Int32, Int32) metody .) |
EndWrite(IAsyncResult) |
Ukončí asynchronní operaci zápisu. (Zvažte místo toho použití WriteAsync(Byte[], Int32, Int32) .) (Zděděno od Stream) |
Equals(Object) |
Určí, zda se zadaný objekt rovná aktuálnímu objektu. (Zděděno od Object) |
Flush() |
Vyprázdní vnitřní vyrovnávací paměti. |
FlushAsync() |
Asynchronně vymaže všechny vyrovnávací paměti pro tento datový proud a způsobí zápis všech dat do vyrovnávací paměti do základního zařízení. (Zděděno od Stream) |
FlushAsync(CancellationToken) |
Asynchronně vymaže všechny vyrovnávací paměti pro tento datový proud GZip, způsobí zápis všech dat do vyrovnávací paměti do základního zařízení a monitoruje požadavky na zrušení. |
FlushAsync(CancellationToken) |
Asynchronně vymaže všechny vyrovnávací paměti pro tento datový proud, způsobí zápis všech dat do vyrovnávací paměti do základního zařízení a monitoruje požadavky na zrušení. (Zděděno od Stream) |
GetHashCode() |
Slouží jako výchozí hashovací funkce. (Zděděno od Object) |
GetLifetimeService() |
Zastaralé.
Načte aktuální životnost objektu služby, který řídí zásady životnosti pro tuto instanci. (Zděděno od MarshalByRefObject) |
GetType() |
Získá aktuální Type instanci. (Zděděno od Object) |
InitializeLifetimeService() |
Zastaralé.
Získá životnost objektu služby, který řídí zásady životnosti pro tuto instanci. (Zděděno od MarshalByRefObject) |
MemberwiseClone() |
Vytvoří mělkou kopii aktuálního Objectsouboru . (Zděděno od Object) |
MemberwiseClone(Boolean) |
Vytvoří mělkou kopii aktuálního MarshalByRefObject objektu. (Zděděno od MarshalByRefObject) |
ObjectInvariant() |
Zastaralé.
Poskytuje podporu pro Contract. (Zděděno od Stream) |
Read(Byte[], Int32, Int32) |
Načte počet dekomprimovaných bajtů do zadaného pole bajtů. |
Read(Span<Byte>) |
Načte posloupnost bajtů z aktuálního datového proudu GZip do rozsahu bajtů a posune pozici v rámci datového proudu GZip o počet přečtených bajtů. |
Read(Span<Byte>) |
Při přepsání v odvozené třídě přečte sekvenci bajtů z aktuálního datového proudu a posune pozici v rámci datového proudu o počet přečtených bajtů. (Zděděno od Stream) |
ReadAsync(Byte[], Int32, Int32) |
Asynchronně přečte posloupnost bajtů z aktuálního datového proudu a posune pozici v rámci datového proudu o počet přečtených bajtů. (Zděděno od Stream) |
ReadAsync(Byte[], Int32, Int32, CancellationToken) |
Asynchronně přečte sekvenci bajtů z aktuálního datového proudu GZip do pole bajtů, posune pozici v rámci datového proudu GZip o počet přečtených bajtů a monitoruje požadavky zrušení. |
ReadAsync(Byte[], Int32, Int32, CancellationToken) |
Asynchronně přečte sekvenci bajtů z aktuálního datového proudu, posune pozici v rámci datového proudu o počet přečtených bajtů a sleduje požadavky na zrušení. (Zděděno od Stream) |
ReadAsync(Memory<Byte>, CancellationToken) |
Asynchronně přečte sekvenci bajtů z aktuálního datového proudu GZip do oblasti bajtové paměti, posune pozici v rámci datového proudu GZip o počet přečtených bajtů a sleduje požadavky na zrušení. |
ReadAsync(Memory<Byte>, CancellationToken) |
Asynchronně přečte sekvenci bajtů z aktuálního datového proudu, posune pozici v rámci datového proudu o počet přečtených bajtů a sleduje požadavky na zrušení. (Zděděno od Stream) |
ReadAtLeast(Span<Byte>, Int32, Boolean) |
Přečte alespoň minimální počet bajtů z aktuálního datového proudu a posune pozici v rámci datového proudu o počet přečtených bajtů. (Zděděno od Stream) |
ReadAtLeastAsync(Memory<Byte>, Int32, Boolean, CancellationToken) |
Asynchronně přečte alespoň minimální počet bajtů z aktuálního datového proudu, posune pozici v rámci datového proudu o počet přečtených bajtů a sleduje požadavky na zrušení. (Zděděno od Stream) |
ReadByte() |
Načte bajt z datového proudu GZip a posune pozici v rámci datového proudu o jeden bajt, nebo vrátí hodnotu -1, pokud na konci datového proudu GZip. |
ReadByte() |
Načte bajt z datového proudu a posune pozici v datovém proudu o jeden bajt, nebo vrátí hodnotu -1, pokud je na konci datového proudu. (Zděděno od Stream) |
ReadExactly(Byte[], Int32, Int32) |
Načte |
ReadExactly(Span<Byte>) |
Načte bajty z aktuálního datového proudu a posune pozici v rámci datového proudu, dokud |
ReadExactlyAsync(Byte[], Int32, Int32, CancellationToken) |
Asynchronně načte |
ReadExactlyAsync(Memory<Byte>, CancellationToken) |
Asynchronně čte bajty z aktuálního datového proudu, posune pozici v rámci datového proudu až do |
Seek(Int64, SeekOrigin) |
Tato vlastnost není podporována a vždy vyvolá NotSupportedException. |
SetLength(Int64) |
Tato vlastnost není podporována a vždy vyvolá NotSupportedException. |
ToString() |
Vrátí řetězec, který představuje aktuální objekt. (Zděděno od Object) |
Write(Byte[], Int32, Int32) |
Zapíše komprimované bajty do podkladového datového proudu GZip ze zadaného pole bajtů. |
Write(ReadOnlySpan<Byte>) |
Zapíše posloupnost bajtů do aktuálního datového proudu GZip z rozsahu bajtů jen pro čtení a posune aktuální pozici v tomto datovém proudu GZip o počet zapsaných bajtů. |
Write(ReadOnlySpan<Byte>) |
Při přepsání v odvozené třídě zapíše sekvenci bajtů do aktuálního datového proudu a posune aktuální pozici v rámci tohoto datového proudu o počet zapsaných bajtů. (Zděděno od Stream) |
WriteAsync(Byte[], Int32, Int32) |
Asynchronně zapíše posloupnost bajtů do aktuálního datového proudu a posune aktuální pozici v rámci tohoto datového proudu o počet zapsaných bajtů. (Zděděno od Stream) |
WriteAsync(Byte[], Int32, Int32, CancellationToken) |
Asynchronně zapisuje komprimované bajty do podkladového datového proudu GZip ze zadaného pole bajtů. |
WriteAsync(Byte[], Int32, Int32, CancellationToken) |
Asynchronně zapíše sekvenci bajtů do aktuálního datového proudu, posune aktuální pozici v rámci tohoto datového proudu o počet zapsaných bajtů a sleduje požadavky na zrušení. (Zděděno od Stream) |
WriteAsync(ReadOnlyMemory<Byte>, CancellationToken) |
Asynchronně zapisuje komprimované bajty do podkladového datového proudu GZip ze zadané oblasti bajtové paměti jen pro čtení. |
WriteAsync(ReadOnlyMemory<Byte>, CancellationToken) |
Asynchronně zapíše sekvenci bajtů do aktuálního datového proudu, posune aktuální pozici v rámci tohoto datového proudu o počet zapsaných bajtů a sleduje požadavky na zrušení. (Zděděno od Stream) |
WriteByte(Byte) |
Zapíše bajt do aktuálního datového proudu GZip a posune aktuální pozici v rámci tohoto datového proudu GZip o jeden. |
WriteByte(Byte) |
Zapíše bajt na aktuální pozici v datovém proudu a posune pozici v datovém proudu o jeden bajt. (Zděděno od Stream) |
Metody rozšíření
CopyToAsync(Stream, PipeWriter, CancellationToken) |
Asynchronně přečte bajty z objektu Stream a zapíše je do zadaného PipeWriterobjektu pomocí tokenu zrušení. |
AsInputStream(Stream) |
Převede spravovaný datový proud v aplikacích .NET pro Windows Store na vstupní datový proud v prostředí Windows Runtime. |
AsOutputStream(Stream) |
Převede spravovaný datový proud v aplikacích .NET pro Windows Store na výstupní datový proud v prostředí Windows Runtime. |
AsRandomAccessStream(Stream) |
Převede zadaný datový proud na datový proud s náhodným přístupem. |
ConfigureAwait(IAsyncDisposable, Boolean) |
Konfiguruje, jak se provádí čekání na úlohy vrácené z asynchronního jednorázového použití. |
Platí pro
Viz také
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro