AcManager.Tools.Objects.ReplayReader.TryToReadNextString C# (CSharp) Метод

TryToReadNextString() приватный Метод

private TryToReadNextString ( ) : string
Результат string
        public string TryToReadNextString() {
            var stream = BaseStream;

            const int l = 2048;
            var b = new byte[l + 4];
            int bytesRead;
            while ((bytesRead = stream.Read(b, 4, l)) > 0) {
                var i = 3;
                while (i < bytesRead) {
                    if (!IsStringCharacter(b[i])) {
                        i += 4;
                    } else if (!IsStringCharacter(b[i - 1])) {
                        i += 3;
                    } else if (!IsStringCharacter(b[i - 2])) {
                        i += 2;
                    } else if (!IsStringCharacter(b[i - 3])) {
                        ++i;
                    } else {
                        var sb = new StringBuilder();
                        for (i = i - 3; i < bytesRead; i++) {
                            var n = b[i];
                            if (IsStringCharacter(n)) {
                                sb.Append((char)n);
                            } else {
                                break;
                            }
                        }

                        if (i == bytesRead) {
                            int n;
                            while ((n = stream.ReadByte()) != -1) {
                                if (IsStringCharacter(n)) {
                                    sb.Append((char)n);
                                } else {
                                    BaseStream.Seek(-1, SeekOrigin.Current);
                                    break;
                                }
                            }
                        } else {
                            BaseStream.Seek(i - bytesRead - 4, SeekOrigin.Current);
                        }

                        return sb.ToString();
                    }
                }

                b[0] = b[l];
                b[1] = b[l + 1];
                b[2] = b[l + 2];
                b[3] = b[l + 3];
            }

            return null;
        }

Usage Example

Пример #1
0
        protected override void LoadOrThrow()
        {
            base.LoadOrThrow();

            Size = new FileInfo(Location).Length;

            if (Id == PreviousReplayName)
            {
                IsNew = true;
            }

            if (!SettingsHolder.Drive.TryToLoadReplays)
            {
                return;
            }

            try {
                using (var reader = new ReplayReader(Location)) {
                    var version = reader.ReadInt32();

                    if (version >= 0xe)
                    {
                        reader.ReadBytes(8);

                        WeatherId          = reader.ReadString();
                        TrackId            = reader.ReadString();
                        TrackConfiguration = reader.ReadString();
                    }
                    else
                    {
                        TrackId = reader.ReadString();
                    }

                    ErrorIf(TracksManager.Instance.GetWrapperById(TrackId) == null, AcErrorType.Replay_TrackIsMissing, TrackId);

                    CarId = reader.TryToReadNextString();
                    try {
                        DriverName = reader.ReadString();
                        reader.ReadInt64();
                        CarSkinId = reader.ReadString();
                    } catch (Exception) {
                        // ignored
                    }
                }
                ParsedSuccessfully = true;
            } catch (Exception e) {
                ParsedSuccessfully = false;
                throw new AcErrorException(this, AcErrorType.Load_Base, e);
            }
        }
All Usage Examples Of AcManager.Tools.Objects.ReplayReader::TryToReadNextString