diff --git a/modules/video_coding/BUILD.gn b/modules/video_coding/BUILD.gn
index adf9255..84681ee 100644
--- a/modules/video_coding/BUILD.gn
+++ b/modules/video_coding/BUILD.gn
@@ -294,6 +294,7 @@
     "../../rtc_base/experiments:quality_scaling_experiment",
     "../../rtc_base/experiments:rate_control_settings",
     "../../rtc_base/system:arch",
+    "../../rtc_base/system:file_wrapper",
     "../../rtc_base/task_utils:repeating_task",
     "../../system_wrappers",
     "../../system_wrappers:field_trial",
diff --git a/modules/video_coding/codecs/test/videocodec_test_fixture_impl.cc b/modules/video_coding/codecs/test/videocodec_test_fixture_impl.cc
index 95381b0..01b09bf 100644
--- a/modules/video_coding/codecs/test/videocodec_test_fixture_impl.cc
+++ b/modules/video_coding/codecs/test/videocodec_test_fixture_impl.cc
@@ -39,7 +39,6 @@
 #include "rtc_base/checks.h"
 #include "rtc_base/cpu_time.h"
 #include "rtc_base/event.h"
-#include "rtc_base/file.h"
 #include "rtc_base/strings/string_builder.h"
 #include "rtc_base/time_utils.h"
 #include "system_wrappers/include/cpu_info.h"
@@ -617,8 +616,8 @@
                                              std::to_string(simulcast_svc_idx);
 
     if (config_.visualization_params.save_encoded_ivf) {
-      rtc::File post_encode_file =
-          rtc::File::Create(output_filename_base + ".ivf");
+      FileWrapper post_encode_file =
+          FileWrapper::OpenWriteOnly(output_filename_base + ".ivf");
       encoded_frame_writers_.push_back(
           IvfFileWriter::Wrap(std::move(post_encode_file), 0));
     }
diff --git a/modules/video_coding/utility/ivf_file_writer.cc b/modules/video_coding/utility/ivf_file_writer.cc
index 225996a..f1dc1d6 100644
--- a/modules/video_coding/utility/ivf_file_writer.cc
+++ b/modules/video_coding/utility/ivf_file_writer.cc
@@ -24,7 +24,7 @@
 
 const size_t kIvfHeaderSize = 32;
 
-IvfFileWriter::IvfFileWriter(rtc::File file, size_t byte_limit)
+IvfFileWriter::IvfFileWriter(FileWrapper file, size_t byte_limit)
     : codec_type_(kVideoCodecGeneric),
       bytes_written_(0),
       byte_limit_(byte_limit),
@@ -42,14 +42,14 @@
   Close();
 }
 
-std::unique_ptr<IvfFileWriter> IvfFileWriter::Wrap(rtc::File file,
+std::unique_ptr<IvfFileWriter> IvfFileWriter::Wrap(FileWrapper file,
                                                    size_t byte_limit) {
   return std::unique_ptr<IvfFileWriter>(
       new IvfFileWriter(std::move(file), byte_limit));
 }
 
 bool IvfFileWriter::WriteHeader() {
-  if (!file_.Seek(0)) {
+  if (!file_.Rewind()) {
     RTC_LOG(LS_WARNING) << "Unable to rewind ivf output file.";
     return false;
   }
@@ -97,7 +97,7 @@
                                           static_cast<uint32_t>(num_frames_));
   ByteWriter<uint32_t>::WriteLittleEndian(&ivf_header[28], 0);  // Reserved.
 
-  if (file_.Write(ivf_header, kIvfHeaderSize) < kIvfHeaderSize) {
+  if (!file_.Write(ivf_header, kIvfHeaderSize)) {
     RTC_LOG(LS_ERROR) << "Unable to write IVF header for ivf output file.";
     return false;
   }
@@ -133,7 +133,7 @@
 
 bool IvfFileWriter::WriteFrame(const EncodedImage& encoded_image,
                                VideoCodecType codec_type) {
-  if (!file_.IsOpen())
+  if (!file_.is_open())
     return false;
 
   if (num_frames_ == 0 && !InitFromFirstFrame(encoded_image, codec_type))
@@ -170,9 +170,8 @@
   ByteWriter<uint32_t>::WriteLittleEndian(
       &frame_header[0], static_cast<uint32_t>(encoded_image.size()));
   ByteWriter<uint64_t>::WriteLittleEndian(&frame_header[4], timestamp);
-  if (file_.Write(frame_header, kFrameHeaderSize) < kFrameHeaderSize ||
-      file_.Write(encoded_image.data(), encoded_image.size()) <
-          encoded_image.size()) {
+  if (!file_.Write(frame_header, kFrameHeaderSize) ||
+      !file_.Write(encoded_image.data(), encoded_image.size())) {
     RTC_LOG(LS_ERROR) << "Unable to write frame to file.";
     return false;
   }
@@ -184,7 +183,7 @@
 }
 
 bool IvfFileWriter::Close() {
-  if (!file_.IsOpen())
+  if (!file_.is_open())
     return false;
 
   if (num_frames_ == 0) {
diff --git a/modules/video_coding/utility/ivf_file_writer.h b/modules/video_coding/utility/ivf_file_writer.h
index 600ab8d..74b3362 100644
--- a/modules/video_coding/utility/ivf_file_writer.h
+++ b/modules/video_coding/utility/ivf_file_writer.h
@@ -18,7 +18,7 @@
 #include "api/video/encoded_image.h"
 #include "common_types.h"  // NOLINT(build/include)
 #include "rtc_base/constructor_magic.h"
-#include "rtc_base/file.h"
+#include "rtc_base/system/file_wrapper.h"
 #include "rtc_base/time_utils.h"
 
 namespace webrtc {
@@ -29,14 +29,15 @@
   // Close or ~IvfFileWriter. If writing a frame would take the file above the
   // |byte_limit| the file will be closed, the write (and all future writes)
   // will fail. A |byte_limit| of 0 is equivalent to no limit.
-  static std::unique_ptr<IvfFileWriter> Wrap(rtc::File file, size_t byte_limit);
+  static std::unique_ptr<IvfFileWriter> Wrap(FileWrapper file,
+                                             size_t byte_limit);
   ~IvfFileWriter();
 
   bool WriteFrame(const EncodedImage& encoded_image, VideoCodecType codec_type);
   bool Close();
 
  private:
-  explicit IvfFileWriter(rtc::File file, size_t byte_limit);
+  explicit IvfFileWriter(FileWrapper file, size_t byte_limit);
 
   bool WriteHeader();
   bool InitFromFirstFrame(const EncodedImage& encoded_image,
@@ -51,7 +52,7 @@
   int64_t last_timestamp_;
   bool using_capture_timestamps_;
   rtc::TimestampWrapAroundHandler wrap_handler_;
-  rtc::File file_;
+  FileWrapper file_;
 
   RTC_DISALLOW_COPY_AND_ASSIGN(IvfFileWriter);
 };
diff --git a/modules/video_coding/utility/ivf_file_writer_unittest.cc b/modules/video_coding/utility/ivf_file_writer_unittest.cc
index 82d604a..80a83d5 100644
--- a/modules/video_coding/utility/ivf_file_writer_unittest.cc
+++ b/modules/video_coding/utility/ivf_file_writer_unittest.cc
@@ -57,13 +57,13 @@
     return true;
   }
 
-  void VerifyIvfHeader(rtc::File* file,
+  void VerifyIvfHeader(FileWrapper* file,
                        const uint8_t fourcc[4],
                        int width,
                        int height,
                        uint32_t num_frames,
                        bool use_capture_tims_ms) {
-    ASSERT_TRUE(file->IsOpen());
+    ASSERT_TRUE(file->is_open());
     uint8_t data[kHeaderSize];
     ASSERT_EQ(static_cast<size_t>(kHeaderSize), file->Read(data, kHeaderSize));
 
@@ -81,7 +81,7 @@
     EXPECT_EQ(0u, ByteReader<uint32_t>::ReadLittleEndian(&data[28]));
   }
 
-  void VerifyDummyTestFrames(rtc::File* file, uint32_t num_frames) {
+  void VerifyDummyTestFrames(FileWrapper* file, uint32_t num_frames) {
     const int kMaxFrameSize = 4;
     for (uint32_t i = 1; i <= num_frames; ++i) {
       uint8_t frame_header[kFrameHeaderSize];
@@ -104,7 +104,8 @@
   void RunBasicFileStructureTest(VideoCodecType codec_type,
                                  const uint8_t fourcc[4],
                                  bool use_capture_tims_ms) {
-    file_writer_ = IvfFileWriter::Wrap(rtc::File::Open(file_name_), 0);
+    file_writer_ =
+        IvfFileWriter::Wrap(FileWrapper::OpenWriteOnly(file_name_), 0);
     ASSERT_TRUE(file_writer_.get());
     const int kWidth = 320;
     const int kHeight = 240;
@@ -113,7 +114,7 @@
                                      use_capture_tims_ms));
     EXPECT_TRUE(file_writer_->Close());
 
-    rtc::File out_file = rtc::File::Open(file_name_);
+    FileWrapper out_file = FileWrapper::OpenReadOnly(file_name_);
     VerifyIvfHeader(&out_file, fourcc, kWidth, kHeight, kNumFrames,
                     use_capture_tims_ms);
     VerifyDummyTestFrames(&out_file, kNumFrames);
@@ -163,7 +164,7 @@
   const int kNumFramesToFit = 1;
 
   file_writer_ = IvfFileWriter::Wrap(
-      rtc::File::Open(file_name_),
+      FileWrapper::OpenWriteOnly(file_name_),
       kHeaderSize +
           kNumFramesToFit * (kFrameHeaderSize + sizeof(dummy_payload)));
   ASSERT_TRUE(file_writer_.get());
@@ -172,7 +173,7 @@
                                     kNumFramesToWrite, true));
   ASSERT_FALSE(file_writer_->Close());
 
-  rtc::File out_file = rtc::File::Open(file_name_);
+  FileWrapper out_file = FileWrapper::OpenReadOnly(file_name_);
   VerifyIvfHeader(&out_file, fourcc, kWidth, kHeight, kNumFramesToFit, true);
   VerifyDummyTestFrames(&out_file, kNumFramesToFit);
 
diff --git a/rtc_base/BUILD.gn b/rtc_base/BUILD.gn
index a47e6d2..c52baf1 100644
--- a/rtc_base/BUILD.gn
+++ b/rtc_base/BUILD.gn
@@ -105,8 +105,6 @@
     "copy_on_write_buffer.h",
     "event_tracer.cc",
     "event_tracer.h",
-    "file.cc",
-    "file.h",
     "flags.cc",
     "flags.h",
     "function_view.h",
@@ -140,13 +138,8 @@
     "zero_memory.h",
   ]
 
-  if (is_posix || is_fuchsia) {
-    sources += [ "file_posix.cc" ]
-  }
-
   if (is_win) {
     sources += [
-      "file_win.cc",
       "win/windows_version.cc",
       "win/windows_version.h",
     ]
@@ -1253,7 +1246,6 @@
       "critical_section_unittest.cc",
       "event_tracer_unittest.cc",
       "event_unittest.cc",
-      "file_unittest.cc",
       "function_view_unittest.cc",
       "logging_unittest.cc",
       "numerics/histogram_percentile_counter_unittest.cc",
diff --git a/rtc_base/file.cc b/rtc_base/file.cc
deleted file mode 100644
index a793500..0000000
--- a/rtc_base/file.cc
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
- *
- *  Use of this source code is governed by a BSD-style license
- *  that can be found in the LICENSE file in the root of the source
- *  tree. An additional intellectual property rights grant can be found
- *  in the file PATENTS.  All contributing project authors may
- *  be found in the AUTHORS file in the root of the source tree.
- */
-
-#include "rtc_base/file.h"
-
-namespace rtc {
-
-File::File(PlatformFile file) : file_(file) {}
-
-File::File() : file_(kInvalidPlatformFileValue) {}
-
-File::~File() {
-  Close();
-}
-
-// static
-File File::Open(const std::string& path) {
-  return File(OpenPlatformFile(path));
-}
-
-// static
-File File::Create(const std::string& path) {
-  return File(CreatePlatformFile(path));
-}
-
-// static
-bool File::Remove(const std::string& path) {
-  return RemoveFile(path);
-}
-
-File::File(File&& other) : file_(other.file_) {
-  other.file_ = kInvalidPlatformFileValue;
-}
-
-File& File::operator=(File&& other) {
-  Close();
-  file_ = other.file_;
-  other.file_ = kInvalidPlatformFileValue;
-  return *this;
-}
-
-bool File::IsOpen() {
-  return file_ != kInvalidPlatformFileValue;
-}
-
-}  // namespace rtc
diff --git a/rtc_base/file.h b/rtc_base/file.h
deleted file mode 100644
index 42428fa..0000000
--- a/rtc_base/file.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
- *
- *  Use of this source code is governed by a BSD-style license
- *  that can be found in the LICENSE file in the root of the source
- *  tree. An additional intellectual property rights grant can be found
- *  in the file PATENTS.  All contributing project authors may
- *  be found in the AUTHORS file in the root of the source tree.
- */
-
-#ifndef RTC_BASE_FILE_H_
-#define RTC_BASE_FILE_H_
-
-#include <stddef.h>
-#include <stdint.h>
-#include <string>
-
-#include "rtc_base/constructor_magic.h"
-#include "rtc_base/platform_file.h"
-
-namespace rtc {
-
-// This class wraps the platform specific APIs for simple file interactions.
-//
-// The various read and write methods are best effort, i.e. if an underlying
-// call does not manage to read/write all the data more calls will be performed,
-// until an error is detected or all data is read/written.
-class File {
- public:
-  // Wraps the given PlatformFile. This class is then responsible for closing
-  // the file, which will be done in the destructor if Close is never called.
-  explicit File(PlatformFile);
-  // The default constructor produces a closed file.
-  File();
-  ~File();
-
-  File(File&& other);
-  File& operator=(File&& other);
-
-  // Open and Create give files with both reading and writing enabled.
-  static File Open(const std::string& path);
-  // If the file already exists it will be overwritten.
-  static File Create(const std::string& path);
-
-  // Remove a file in the file system.
-  static bool Remove(const std::string& path);
-
-  size_t Write(const uint8_t* data, size_t length);
-  size_t Read(uint8_t* buffer, size_t length);
-
-  // The current position in the file after a call to these methods is platform
-  // dependent (MSVC gives position offset+length, most other
-  // compilers/platforms do not alter the position), i.e. do not depend on it,
-  // do a Seek before any subsequent Read/Write.
-  size_t WriteAt(const uint8_t* data, size_t length, size_t offset);
-  size_t ReadAt(uint8_t* buffer, size_t length, size_t offset);
-
-  // Attempt to position the file at the given offset from the start.
-  // Returns true if successful, false otherwise.
-  bool Seek(size_t offset);
-
-  // Attempt to close the file. Returns true if successful, false otherwise,
-  // most notably when the file is already closed.
-  bool Close();
-
-  bool IsOpen();
-
- private:
-  PlatformFile file_;
-  RTC_DISALLOW_COPY_AND_ASSIGN(File);
-};
-
-}  // namespace rtc
-
-#endif  // RTC_BASE_FILE_H_
diff --git a/rtc_base/file_posix.cc b/rtc_base/file_posix.cc
deleted file mode 100644
index 4920192..0000000
--- a/rtc_base/file_posix.cc
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
- *
- *  Use of this source code is governed by a BSD-style license
- *  that can be found in the LICENSE file in the root of the source
- *  tree. An additional intellectual property rights grant can be found
- *  in the file PATENTS.  All contributing project authors may
- *  be found in the AUTHORS file in the root of the source tree.
- */
-
-#include <errno.h>
-#include <fcntl.h>
-#include <stddef.h>
-#include <stdint.h>
-#include <unistd.h>
-#include <limits>
-
-#include "rtc_base/checks.h"
-#include "rtc_base/file.h"
-#include "rtc_base/platform_file.h"
-
-namespace rtc {
-
-size_t File::Write(const uint8_t* data, size_t length) {
-  size_t total_written = 0;
-  do {
-    ssize_t written;
-    do {
-      written = ::write(file_, data + total_written, length - total_written);
-    } while (written == -1 && errno == EINTR);
-    if (written == -1)
-      break;
-    total_written += written;
-  } while (total_written < length);
-  return total_written;
-}
-
-size_t File::Read(uint8_t* buffer, size_t length) {
-  size_t total_read = 0;
-  do {
-    ssize_t read;
-    do {
-      read = ::read(file_, buffer + total_read, length - total_read);
-    } while (read == -1 && errno == EINTR);
-    if (read == -1)
-      break;
-    total_read += read;
-  } while (total_read < length);
-  return total_read;
-}
-
-size_t File::WriteAt(const uint8_t* data, size_t length, size_t offset) {
-  size_t total_written = 0;
-  do {
-    ssize_t written;
-    do {
-      written = ::pwrite(file_, data + total_written, length - total_written,
-                         offset + total_written);
-    } while (written == -1 && errno == EINTR);
-    if (written == -1)
-      break;
-    total_written += written;
-  } while (total_written < length);
-  return total_written;
-}
-
-size_t File::ReadAt(uint8_t* buffer, size_t length, size_t offset) {
-  size_t total_read = 0;
-  do {
-    ssize_t read;
-    do {
-      read = ::pread(file_, buffer + total_read, length - total_read,
-                     offset + total_read);
-    } while (read == -1 && errno == EINTR);
-    if (read == -1)
-      break;
-    total_read += read;
-  } while (total_read < length);
-  return total_read;
-}
-
-bool File::Seek(size_t offset) {
-  RTC_DCHECK_LE(offset, std::numeric_limits<off_t>::max());
-  return lseek(file_, static_cast<off_t>(offset), SEEK_SET) != -1;
-}
-
-bool File::Close() {
-  if (file_ == rtc::kInvalidPlatformFileValue)
-    return false;
-  bool ret = close(file_) == 0;
-  file_ = rtc::kInvalidPlatformFileValue;
-  return ret;
-}
-
-}  // namespace rtc
diff --git a/rtc_base/file_unittest.cc b/rtc_base/file_unittest.cc
deleted file mode 100644
index bd3a61b..0000000
--- a/rtc_base/file_unittest.cc
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- *  Copyright 2016 The WebRTC Project Authors. All rights reserved.
- *
- *  Use of this source code is governed by a BSD-style license
- *  that can be found in the LICENSE file in the root of the source
- *  tree. An additional intellectual property rights grant can be found
- *  in the file PATENTS.  All contributing project authors may
- *  be found in the AUTHORS file in the root of the source tree.
- */
-
-#include <string.h>
-#include <string>
-
-#include "rtc_base/file.h"
-#include "test/gtest.h"
-#include "test/testsupport/file_utils.h"
-
-#if defined(WEBRTC_WIN)
-
-#include "rtc_base/win32.h"
-
-#else  // if defined(WEBRTC_WIN)
-
-#include <errno.h>
-
-#endif
-
-namespace rtc {
-
-int LastError() {
-#if defined(WEBRTC_WIN)
-  return ::GetLastError();
-#else
-  return errno;
-#endif
-}
-
-bool VerifyBuffer(uint8_t* buffer, size_t length, uint8_t start_value) {
-  for (size_t i = 0; i < length; ++i) {
-    uint8_t val = start_value++;
-    EXPECT_EQ(val, buffer[i]);
-    if (buffer[i] != val)
-      return false;
-  }
-  // Prevent the same buffer from being verified multiple times simply
-  // because some operation that should have written to it failed
-  memset(buffer, 0, length);
-  return true;
-}
-
-class FileTest : public ::testing::Test {
- protected:
-  std::string path_;
-  void SetUp() override {
-    path_ = webrtc::test::TempFilename(webrtc::test::OutputPath(), "test_file");
-    ASSERT_FALSE(path_.empty());
-  }
-  void TearDown() override { RemoveFile(path_); }
-};
-
-TEST_F(FileTest, DefaultConstructor) {
-  File file;
-  uint8_t buffer[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
-
-  EXPECT_FALSE(file.IsOpen());
-  EXPECT_EQ(0u, file.Write(buffer, 10));
-  EXPECT_FALSE(file.Seek(0));
-  EXPECT_EQ(0u, file.Read(buffer, 10));
-  EXPECT_EQ(0u, file.WriteAt(buffer, 10, 0));
-  EXPECT_EQ(0u, file.ReadAt(buffer, 10, 0));
-  EXPECT_FALSE(file.Close());
-}
-
-TEST_F(FileTest, DoubleClose) {
-  File file = File::Open(path_);
-  ASSERT_TRUE(file.IsOpen()) << "Error: " << LastError();
-
-  EXPECT_TRUE(file.Close());
-  EXPECT_FALSE(file.Close());
-}
-
-TEST_F(FileTest, SimpleReadWrite) {
-  File file = File::Open(path_);
-  ASSERT_TRUE(file.IsOpen()) << "Error: " << LastError();
-
-  uint8_t data[100] = {0};
-  uint8_t out[100] = {0};
-  for (int i = 0; i < 100; ++i) {
-    data[i] = i;
-  }
-
-  EXPECT_EQ(10u, file.Write(data, 10));
-
-  EXPECT_TRUE(file.Seek(0));
-  EXPECT_EQ(10u, file.Read(out, 10));
-  EXPECT_TRUE(VerifyBuffer(out, 10, 0));
-
-  EXPECT_TRUE(file.Seek(0));
-  EXPECT_EQ(100u, file.Write(data, 100));
-
-  EXPECT_TRUE(file.Seek(0));
-  EXPECT_EQ(100u, file.Read(out, 100));
-  EXPECT_TRUE(VerifyBuffer(out, 100, 0));
-
-  EXPECT_TRUE(file.Seek(1));
-  EXPECT_EQ(50u, file.Write(data, 50));
-  EXPECT_EQ(50u, file.Write(data + 50, 50));
-
-  EXPECT_TRUE(file.Seek(1));
-  EXPECT_EQ(100u, file.Read(out, 100));
-  EXPECT_TRUE(VerifyBuffer(out, 100, 0));
-}
-
-TEST_F(FileTest, ReadWriteClose) {
-  File file = File::Open(path_);
-  ASSERT_TRUE(file.IsOpen()) << "Error: " << LastError();
-
-  uint8_t data[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
-  uint8_t out[10] = {0};
-  EXPECT_EQ(10u, file.Write(data, 10));
-  EXPECT_TRUE(file.Close());
-
-  File file2 = File::Open(path_);
-  ASSERT_TRUE(file2.IsOpen()) << "Error: " << LastError();
-  EXPECT_EQ(10u, file2.Read(out, 10));
-  EXPECT_TRUE(VerifyBuffer(out, 10, 0));
-}
-
-TEST_F(FileTest, RandomAccessRead) {
-  File file = File::Open(path_);
-  ASSERT_TRUE(file.IsOpen()) << "Error: " << LastError();
-
-  uint8_t data[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
-  uint8_t out[10] = {0};
-  EXPECT_EQ(10u, file.Write(data, 10));
-
-  EXPECT_EQ(4u, file.ReadAt(out, 4, 0));
-  EXPECT_TRUE(VerifyBuffer(out, 4, 0));
-
-  EXPECT_EQ(4u, file.ReadAt(out, 4, 4));
-  EXPECT_TRUE(VerifyBuffer(out, 4, 4));
-
-  EXPECT_EQ(5u, file.ReadAt(out, 5, 5));
-  EXPECT_TRUE(VerifyBuffer(out, 5, 5));
-}
-
-TEST_F(FileTest, RandomAccessReadWrite) {
-  File file = File::Open(path_);
-  ASSERT_TRUE(file.IsOpen()) << "Error: " << LastError();
-
-  uint8_t data[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
-  uint8_t out[10] = {0};
-  EXPECT_EQ(10u, file.Write(data, 10));
-  EXPECT_TRUE(file.Seek(4));
-
-  EXPECT_EQ(4u, file.WriteAt(data, 4, 4));
-  EXPECT_EQ(4u, file.ReadAt(out, 4, 4));
-  EXPECT_TRUE(VerifyBuffer(out, 4, 0));
-
-  EXPECT_EQ(2u, file.WriteAt(data, 2, 8));
-  EXPECT_EQ(2u, file.ReadAt(out, 2, 8));
-  EXPECT_TRUE(VerifyBuffer(out, 2, 0));
-}
-
-TEST_F(FileTest, ShouldBeAbleToRemoveFile) {
-  {
-    File file = File::Open(path_);
-    ASSERT_TRUE(file.IsOpen()) << "Error: " << LastError();
-  }
-
-  ASSERT_TRUE(File::Remove(path_)) << "Error: " << LastError();
-}
-
-}  // namespace rtc
diff --git a/rtc_base/file_win.cc b/rtc_base/file_win.cc
deleted file mode 100644
index d7580aa..0000000
--- a/rtc_base/file_win.cc
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
- *
- *  Use of this source code is governed by a BSD-style license
- *  that can be found in the LICENSE file in the root of the source
- *  tree. An additional intellectual property rights grant can be found
- *  in the file PATENTS.  All contributing project authors may
- *  be found in the AUTHORS file in the root of the source tree.
- */
-
-#include "rtc_base/file.h"
-
-#include <io.h>
-#include <windows.h>
-
-#include <limits>
-
-#include "rtc_base/checks.h"
-
-namespace rtc {
-
-size_t File::Write(const uint8_t* data, size_t length) {
-  RTC_DCHECK_LT(length, std::numeric_limits<DWORD>::max());
-  size_t total_written = 0;
-  do {
-    DWORD written;
-    if (!::WriteFile(file_, data + total_written,
-                     static_cast<DWORD>(length - total_written), &written,
-                     nullptr)) {
-      break;
-    }
-    total_written += written;
-  } while (total_written < length);
-  return total_written;
-}
-
-size_t File::Read(uint8_t* buffer, size_t length) {
-  RTC_DCHECK_LT(length, std::numeric_limits<DWORD>::max());
-  size_t total_read = 0;
-  do {
-    DWORD read;
-    if (!::ReadFile(file_, buffer + total_read,
-                    static_cast<DWORD>(length - total_read), &read, nullptr)) {
-      break;
-    }
-    total_read += read;
-  } while (total_read < length);
-  return total_read;
-}
-
-size_t File::WriteAt(const uint8_t* data, size_t length, size_t offset) {
-  RTC_DCHECK_LT(length, std::numeric_limits<DWORD>::max());
-  size_t total_written = 0;
-  do {
-    DWORD written;
-
-    LARGE_INTEGER offset_li;
-    offset_li.QuadPart = offset + total_written;
-
-    OVERLAPPED overlapped = {0};
-    overlapped.Offset = offset_li.LowPart;
-    overlapped.OffsetHigh = offset_li.HighPart;
-
-    if (!::WriteFile(file_, data + total_written,
-                     static_cast<DWORD>(length - total_written), &written,
-                     &overlapped)) {
-      break;
-    }
-
-    total_written += written;
-  } while (total_written < length);
-  return total_written;
-}
-
-size_t File::ReadAt(uint8_t* buffer, size_t length, size_t offset) {
-  RTC_DCHECK_LT(length, std::numeric_limits<DWORD>::max());
-  size_t total_read = 0;
-  do {
-    DWORD read;
-
-    LARGE_INTEGER offset_li;
-    offset_li.QuadPart = offset + total_read;
-
-    OVERLAPPED overlapped = {0};
-    overlapped.Offset = offset_li.LowPart;
-    overlapped.OffsetHigh = offset_li.HighPart;
-
-    if (!::ReadFile(file_, buffer + total_read,
-                    static_cast<DWORD>(length - total_read), &read,
-                    &overlapped)) {
-      break;
-    }
-
-    total_read += read;
-  } while (total_read < length);
-  return total_read;
-}
-
-bool File::Seek(size_t offset) {
-  LARGE_INTEGER distance;
-  distance.QuadPart = offset;
-  return SetFilePointerEx(file_, distance, nullptr, FILE_BEGIN) != 0;
-}
-
-bool File::Close() {
-  if (file_ == kInvalidPlatformFileValue)
-    return false;
-  bool ret = CloseHandle(file_) != 0;
-  file_ = kInvalidPlatformFileValue;
-  return ret;
-}
-
-}  // namespace rtc
diff --git a/rtc_base/system/file_wrapper.h b/rtc_base/system/file_wrapper.h
index 8a3adc5..4f5d511 100644
--- a/rtc_base/system/file_wrapper.h
+++ b/rtc_base/system/file_wrapper.h
@@ -71,7 +71,6 @@
 
   // Seeks to the beginning of file. Returns true on success, false on failure,
   // e.g., if the underlying file isn't seekable.
-  // TODO(nisse): Delete this method.
   bool Rewind();
 
   // Returns number of bytes read. Short count indicates EOF or error.
diff --git a/test/BUILD.gn b/test/BUILD.gn
index fa0f4c7..254b165 100644
--- a/test/BUILD.gn
+++ b/test/BUILD.gn
@@ -310,6 +310,7 @@
     deps = [
       ":fileutils",
       "../rtc_base:rtc_base_approved",
+      "../rtc_base/system:file_wrapper",
     ]
   }
 
@@ -361,6 +362,7 @@
       "../modules/video_capture",
       "../modules/video_coding:simulcast_test_fixture_impl",
       "../rtc_base:rtc_base_approved",
+      "../rtc_base/system:file_wrapper",
       "../test:single_threaded_task_queue",
       "pc/e2e:e2e_unittests",
       "scenario:scenario_unittests",
diff --git a/test/testsupport/test_artifacts.cc b/test/testsupport/test_artifacts.cc
index f45a92d..b417745 100644
--- a/test/testsupport/test_artifacts.cc
+++ b/test/testsupport/test_artifacts.cc
@@ -12,9 +12,9 @@
 
 #include <string.h>
 
-#include "rtc_base/file.h"
 #include "rtc_base/flags.h"
 #include "rtc_base/logging.h"
+#include "rtc_base/system/file_wrapper.h"
 #include "test/testsupport/file_utils.h"
 
 namespace {
@@ -53,10 +53,10 @@
     return false;
   }
 
-  rtc::File output =
-      rtc::File::Create(JoinFilename(FLAG_test_artifacts_dir, filename));
+  FileWrapper output = FileWrapper::OpenWriteOnly(
+      JoinFilename(FLAG_test_artifacts_dir, filename));
 
-  return output.IsOpen() && output.Write(buffer, length) == length;
+  return output.is_open() && output.Write(buffer, length);
 }
 
 bool WriteToTestArtifactsDir(const char* filename, const std::string& content) {
diff --git a/test/testsupport/test_artifacts_unittest.cc b/test/testsupport/test_artifacts_unittest.cc
index 41c188d..2c3667b 100644
--- a/test/testsupport/test_artifacts_unittest.cc
+++ b/test/testsupport/test_artifacts_unittest.cc
@@ -13,8 +13,8 @@
 #include <string.h>
 #include <string>
 
-#include "rtc_base/file.h"
 #include "rtc_base/flags.h"
+#include "rtc_base/system/file_wrapper.h"
 #include "test/gtest.h"
 #include "test/testsupport/file_utils.h"
 
@@ -41,9 +41,9 @@
   const char* content = "some-contents";
   if (WriteToTestArtifactsDir(filename, content)) {
     std::string out_file = JoinFilename(FLAG_test_artifacts_dir, filename);
-    rtc::File input = rtc::File::Open(out_file);
-    EXPECT_TRUE(input.IsOpen());
-    EXPECT_TRUE(input.Seek(0));
+    FileWrapper input = FileWrapper::OpenReadOnly(out_file);
+    EXPECT_TRUE(input.is_open());
+    EXPECT_TRUE(input.Rewind());
     uint8_t buffer[32];
     EXPECT_EQ(input.Read(buffer, strlen(content)), strlen(content));
     buffer[strlen(content)] = 0;
@@ -51,7 +51,7 @@
               std::string(reinterpret_cast<char*>(buffer)));
     input.Close();
 
-    EXPECT_TRUE(rtc::File::Remove(out_file));
+    EXPECT_TRUE(RemoveFile(out_file));
   }
 }
 
diff --git a/video/frame_dumping_decoder.cc b/video/frame_dumping_decoder.cc
index 097bd01..f42edce 100644
--- a/video/frame_dumping_decoder.cc
+++ b/video/frame_dumping_decoder.cc
@@ -13,14 +13,13 @@
 #include <utility>
 
 #include "modules/video_coding/include/video_codec_interface.h"
-#include "rtc_base/file.h"
 
 namespace webrtc {
 
 FrameDumpingDecoder::FrameDumpingDecoder(std::unique_ptr<VideoDecoder> decoder,
-                                         rtc::PlatformFile file)
+                                         FileWrapper file)
     : decoder_(std::move(decoder)),
-      writer_(IvfFileWriter::Wrap(rtc::File(file),
+      writer_(IvfFileWriter::Wrap(std::move(file),
                                   /* byte_limit= */ 100000000)) {}
 
 FrameDumpingDecoder::~FrameDumpingDecoder() = default;
diff --git a/video/frame_dumping_decoder.h b/video/frame_dumping_decoder.h
index 836c8d8..9f3ed89 100644
--- a/video/frame_dumping_decoder.h
+++ b/video/frame_dumping_decoder.h
@@ -19,15 +19,13 @@
 #include "api/video_codecs/video_decoder.h"
 #include "modules/video_coding/include/video_codec_interface.h"
 #include "modules/video_coding/utility/ivf_file_writer.h"
-#include "rtc_base/platform_file.h"
 
 namespace webrtc {
 
 // A decoder wrapper that writes the encoded frames to a file.
 class FrameDumpingDecoder : public VideoDecoder {
  public:
-  FrameDumpingDecoder(std::unique_ptr<VideoDecoder> decoder,
-                      rtc::PlatformFile file);
+  FrameDumpingDecoder(std::unique_ptr<VideoDecoder> decoder, FileWrapper file);
   ~FrameDumpingDecoder() override;
 
   int32_t InitDecode(const VideoCodec* codec_settings,
diff --git a/video/video_quality_test.cc b/video/video_quality_test.cc
index 2f3d2bb..8349566 100644
--- a/video/video_quality_test.cc
+++ b/video/video_quality_test.cc
@@ -87,11 +87,11 @@
  public:
   QualityTestVideoEncoder(std::unique_ptr<VideoEncoder> encoder,
                           VideoAnalyzer* analyzer,
-                          std::vector<rtc::PlatformFile> files)
+                          std::vector<FileWrapper> files)
       : encoder_(std::move(encoder)), analyzer_(analyzer) {
-    for (rtc::PlatformFile file : files) {
+    for (FileWrapper& file : files) {
       writers_.push_back(
-          IvfFileWriter::Wrap(rtc::File(file), /* byte_limit= */ 100000000));
+          IvfFileWriter::Wrap(std::move(file), /* byte_limit= */ 100000000));
     }
   }
   // Implement VideoEncoder
@@ -182,7 +182,7 @@
     std::string path =
         params_.logging.encoded_frame_base_path + "." + str.str() + ".recv.ivf";
     decoder = absl::make_unique<FrameDumpingDecoder>(
-        std::move(decoder), rtc::CreatePlatformFile(path));
+        std::move(decoder), FileWrapper::OpenWriteOnly(path));
   }
   return decoder;
 }
@@ -208,15 +208,16 @@
     sb << send_logs_++;
     std::string prefix =
         params_.logging.encoded_frame_base_path + "." + sb.str() + ".send.";
+    std::vector<FileWrapper> files;
+    files.push_back(FileWrapper::OpenWriteOnly(prefix + "1.ivf"));
+    files.push_back(FileWrapper::OpenWriteOnly(prefix + "2.ivf"));
+    files.push_back(FileWrapper::OpenWriteOnly(prefix + "3.ivf"));
+
     encoder = absl::make_unique<QualityTestVideoEncoder>(
-        std::move(encoder), analyzer,
-        std::vector<rtc::PlatformFile>(
-            {rtc::CreatePlatformFile(prefix + "1.ivf"),
-             rtc::CreatePlatformFile(prefix + "2.ivf"),
-             rtc::CreatePlatformFile(prefix + "3.ivf")}));
+        std::move(encoder), analyzer, std::move(files));
   } else if (analyzer) {
     encoder = absl::make_unique<QualityTestVideoEncoder>(
-        std::move(encoder), analyzer, std::vector<rtc::PlatformFile>());
+        std::move(encoder), analyzer, std::vector<FileWrapper>());
   }
 
   return encoder;
diff --git a/video/video_receive_stream.cc b/video/video_receive_stream.cc
index 4e6444a..92f1571 100644
--- a/video/video_receive_stream.cc
+++ b/video/video_receive_stream.cc
@@ -319,7 +319,7 @@
       ssb << decoded_output_file << "/webrtc_receive_stream_"
           << this->config_.rtp.local_ssrc << ".ivf";
       video_decoder = absl::make_unique<FrameDumpingDecoder>(
-          std::move(video_decoder), rtc::CreatePlatformFile(ssb.str()));
+          std::move(video_decoder), FileWrapper::OpenWriteOnly(ssb.str()));
     }
 
     video_decoders_.push_back(std::move(video_decoder));
diff --git a/video/video_replay.cc b/video/video_replay.cc
index 6cfb8c1..a0621aa 100644
--- a/video/video_replay.cc
+++ b/video/video_replay.cc
@@ -23,7 +23,6 @@
 #include "media/engine/internal_decoder_factory.h"
 #include "modules/rtp_rtcp/include/rtp_header_parser.h"
 #include "rtc_base/checks.h"
-#include "rtc_base/file.h"
 #include "rtc_base/flags.h"
 #include "rtc_base/string_to_number.h"
 #include "rtc_base/strings/json.h"
