Lines Matching full:file
3 // found in the LICENSE file.
5 #include "base/files/file.h"
32 using base::File;
41 // Don't create a File at all. in TEST()
42 File file; in TEST() local
43 EXPECT_FALSE(file.IsValid()); in TEST()
44 EXPECT_EQ(base::File::FILE_ERROR_FAILED, file.error_details()); in TEST()
46 File file2(base::File::FILE_ERROR_TOO_MANY_OPENED); in TEST()
48 EXPECT_EQ(base::File::FILE_ERROR_TOO_MANY_OPENED, file2.error_details()); in TEST()
52 // Open a file that doesn't exist. in TEST()
53 File file(file_path, base::File::FLAG_OPEN | base::File::FLAG_READ); in TEST() local
54 EXPECT_FALSE(file.IsValid()); in TEST()
55 EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, file.error_details()); in TEST()
56 EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, base::File::GetLastFileError()); in TEST()
60 // Open or create a file. in TEST()
61 File file(file_path, base::File::FLAG_OPEN_ALWAYS | base::File::FLAG_READ); in TEST() local
62 EXPECT_TRUE(file.IsValid()); in TEST()
63 EXPECT_TRUE(file.created()); in TEST()
64 EXPECT_EQ(base::File::FILE_OK, file.error_details()); in TEST()
68 // Open an existing file. in TEST()
69 File file(file_path, base::File::FLAG_OPEN | base::File::FLAG_READ); in TEST() local
70 EXPECT_TRUE(file.IsValid()); in TEST()
71 EXPECT_FALSE(file.created()); in TEST()
72 EXPECT_EQ(base::File::FILE_OK, file.error_details()); in TEST()
74 // This time verify closing the file. in TEST()
75 file.Close(); in TEST()
76 EXPECT_FALSE(file.IsValid()); in TEST()
80 // Open an existing file through Initialize in TEST()
81 File file; in TEST() local
82 file.Initialize(file_path, base::File::FLAG_OPEN | base::File::FLAG_READ); in TEST()
83 EXPECT_TRUE(file.IsValid()); in TEST()
84 EXPECT_FALSE(file.created()); in TEST()
85 EXPECT_EQ(base::File::FILE_OK, file.error_details()); in TEST()
87 // This time verify closing the file. in TEST()
88 file.Close(); in TEST()
89 EXPECT_FALSE(file.IsValid()); in TEST()
93 // Create a file that exists. in TEST()
94 File file(file_path, base::File::FLAG_CREATE | base::File::FLAG_READ); in TEST() local
95 EXPECT_FALSE(file.IsValid()); in TEST()
96 EXPECT_FALSE(file.created()); in TEST()
97 EXPECT_EQ(base::File::FILE_ERROR_EXISTS, file.error_details()); in TEST()
98 EXPECT_EQ(base::File::FILE_ERROR_EXISTS, base::File::GetLastFileError()); in TEST()
102 // Create or overwrite a file. in TEST()
103 File file(file_path, in TEST() local
104 base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE); in TEST()
105 EXPECT_TRUE(file.IsValid()); in TEST()
106 EXPECT_TRUE(file.created()); in TEST()
107 EXPECT_EQ(base::File::FILE_OK, file.error_details()); in TEST()
111 // Create a delete-on-close file. in TEST()
113 File file(file_path, in TEST() local
114 base::File::FLAG_OPEN_ALWAYS | base::File::FLAG_READ | in TEST()
115 base::File::FLAG_DELETE_ON_CLOSE); in TEST()
116 EXPECT_TRUE(file.IsValid()); in TEST()
117 EXPECT_TRUE(file.created()); in TEST()
118 EXPECT_EQ(base::File::FILE_OK, file.error_details()); in TEST()
128 File file(file_path, in TEST() local
129 base::File::FLAG_OPEN_ALWAYS | base::File::FLAG_DELETE_ON_CLOSE); in TEST()
130 std::swap(file, file); in TEST()
131 EXPECT_TRUE(file.IsValid()); in TEST()
140 File file(file_path, base::File::FLAG_OPEN_ALWAYS | base::File::FLAG_ASYNC); in TEST() local
141 EXPECT_TRUE(file.IsValid()); in TEST()
142 EXPECT_TRUE(file.async()); in TEST()
146 File file(file_path, base::File::FLAG_OPEN_ALWAYS); in TEST() local
147 EXPECT_TRUE(file.IsValid()); in TEST()
148 EXPECT_FALSE(file.async()); in TEST()
157 // Create a file. in TEST()
158 File file(file_path, base::File::FLAG_OPEN_ALWAYS | base::File::FLAG_READ | in TEST() local
159 base::File::FLAG_WIN_SHARE_DELETE); in TEST()
160 EXPECT_TRUE(file.IsValid()); in TEST()
161 EXPECT_TRUE(file.created()); in TEST()
162 EXPECT_EQ(base::File::FILE_OK, file.error_details()); in TEST()
164 // Open an existing file and mark it as delete on close. in TEST()
165 File same_file(file_path, in TEST()
166 base::File::FLAG_OPEN | base::File::FLAG_DELETE_ON_CLOSE | in TEST()
167 base::File::FLAG_READ); in TEST()
168 EXPECT_TRUE(file.IsValid()); in TEST()
170 EXPECT_EQ(base::File::FILE_OK, same_file.error_details()); in TEST()
172 // Close both handles and check that the file is gone. in TEST()
173 file.Close(); in TEST()
182 File file(file_path, in TEST() local
183 base::File::FLAG_CREATE | base::File::FLAG_READ | in TEST()
184 base::File::FLAG_WRITE); in TEST()
185 ASSERT_TRUE(file.IsValid()); in TEST()
190 // Write 0 bytes to the file. in TEST()
191 int bytes_written = file.Write(0, data_to_write, 0); in TEST()
195 bytes_written = file.Write(0, nullptr, 0); in TEST()
198 // Write "test" to the file. in TEST()
199 bytes_written = file.Write(0, data_to_write, kTestDataSize); in TEST()
204 int bytes_read = file.Read(kTestDataSize, data_read_1, kTestDataSize); in TEST()
207 // Read from somewhere in the middle of the file. in TEST()
209 bytes_read = file.Read(kPartialReadOffset, data_read_1, kTestDataSize); in TEST()
215 bytes_read = file.Read(0, data_read_1, 0); in TEST()
218 // Read the entire file. in TEST()
219 bytes_read = file.Read(0, data_read_1, kTestDataSize); in TEST()
225 bytes_read = file.ReadNoBestEffort(0, data_read_1, kTestDataSize); in TEST()
230 // Write past the end of the file. in TEST()
233 bytes_written = file.Write(kOffsetBeyondEndOfFile, in TEST()
237 // Make sure the file was extended. in TEST()
242 // Make sure the file was zero-padded. in TEST()
244 bytes_read = file.Read(0, data_read_2, static_cast<int>(file_size)); in TEST()
258 File file(file_path, base::File::FLAG_CREATE | base::File::FLAG_READ | in TEST() local
259 base::File::FLAG_WRITE); in TEST()
260 ASSERT_TRUE(file.IsValid()); in TEST()
262 // Write 0 bytes to the file. in TEST()
263 std::optional<size_t> bytes_written = file.Write(0, base::span<uint8_t>()); in TEST()
267 // Write "test" to the file. in TEST()
269 bytes_written = file.Write(0, base::as_byte_span(data_to_write)); in TEST()
276 file.Read(bytes_written.value(), data_read_1); in TEST()
280 // Read from somewhere in the middle of the file. in TEST()
282 bytes_read = file.Read(kPartialReadOffset, data_read_1); in TEST()
290 bytes_read = file.Read(0, base::span<uint8_t>()); in TEST()
294 // Read the entire file. in TEST()
295 bytes_read = file.Read(0, data_read_1); in TEST()
302 // Write past the end of the file. in TEST()
306 file.Write(kOffsetBeyondEndOfFile, in TEST()
311 // Make sure the file was extended. in TEST()
317 // Make sure the file was zero-padded. in TEST()
319 bytes_read = file.Read(0, data_read_2); in TEST()
339 EXPECT_EQ(File::FILE_ERROR_ACCESS_DENIED, File::GetLastFileError()); in TEST()
345 File file(nonexistent_path, File::FLAG_OPEN | File::FLAG_READ); in TEST() local
346 File::Error last_error = File::GetLastFileError(); in TEST()
347 EXPECT_FALSE(file.IsValid()); in TEST()
348 EXPECT_EQ(File::FILE_ERROR_NOT_FOUND, file.error_details()); in TEST()
349 EXPECT_EQ(File::FILE_ERROR_NOT_FOUND, last_error); in TEST()
356 File file(file_path, base::File::FLAG_CREATE | base::File::FLAG_APPEND); in TEST() local
357 ASSERT_TRUE(file.IsValid()); in TEST()
362 // Write 0 bytes to the file. in TEST()
363 int bytes_written = file.Write(0, data_to_write, 0); in TEST()
367 bytes_written = file.Write(0, nullptr, 0); in TEST()
370 // Write "test" to the file. in TEST()
371 bytes_written = file.Write(0, data_to_write, kTestDataSize); in TEST()
374 file.Close(); in TEST()
375 File file2(file_path, in TEST()
376 base::File::FLAG_OPEN | base::File::FLAG_READ | in TEST()
377 base::File::FLAG_APPEND); in TEST()
380 // Test passing the file around. in TEST()
381 file = std::move(file2); in TEST()
383 ASSERT_TRUE(file.IsValid()); in TEST()
388 // Append "78" to the file. in TEST()
389 bytes_written = file.Write(0, append_data_to_write, kAppendDataSize); in TEST()
392 // Read the entire file. in TEST()
394 int bytes_read = file.Read(0, data_read_1, in TEST()
408 File file(file_path, in TEST() local
409 base::File::FLAG_CREATE | base::File::FLAG_READ | in TEST()
410 base::File::FLAG_WRITE); in TEST()
411 ASSERT_TRUE(file.IsValid()); in TEST()
412 EXPECT_EQ(0, file.GetLength()); in TEST()
414 // Write "test" to the file. in TEST()
417 int bytes_written = file.Write(0, data_to_write, kTestDataSize); in TEST()
420 // Extend the file. in TEST()
423 EXPECT_TRUE(file.SetLength(kExtendedFileLength)); in TEST()
424 EXPECT_EQ(kExtendedFileLength, file.GetLength()); in TEST()
428 // Make sure the file was zero-padded. in TEST()
430 int bytes_read = file.Read(0, data_read, static_cast<int>(file_size)); in TEST()
437 // Truncate the file. in TEST()
439 EXPECT_TRUE(file.SetLength(kTruncatedFileLength)); in TEST()
440 EXPECT_EQ(kTruncatedFileLength, file.GetLength()); in TEST()
444 // Make sure the file was truncated. in TEST()
445 bytes_read = file.Read(0, data_read, kTestDataSize); in TEST()
451 // Expand the file past the 4 GB limit. in TEST()
453 EXPECT_TRUE(file.SetLength(kBigFileLength)); in TEST()
454 EXPECT_EQ(kBigFileLength, file.GetLength()); in TEST()
459 // Close the file and reopen with base::File::FLAG_CREATE_ALWAYS, and make in TEST()
460 // sure the file is empty (old file was overridden). in TEST()
461 file.Close(); in TEST()
462 file.Initialize(file_path, in TEST()
463 base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE); in TEST()
464 EXPECT_EQ(0, file.GetLength()); in TEST()
475 File file(temp_dir.GetPath().AppendASCII("touch_get_info_file"), local
476 base::File::FLAG_CREATE | base::File::FLAG_WRITE |
477 base::File::FLAG_WRITE_ATTRIBUTES);
478 ASSERT_TRUE(file.IsValid());
480 // Get info for a newly created file.
481 base::File::Info info;
482 EXPECT_TRUE(file.GetInfo(&info));
495 // Write "test" to the file.
498 int bytes_written = file.Write(0, data, kTestDataSize);
508 EXPECT_TRUE(file.SetTimes(new_last_accessed, new_last_modified));
510 // Make sure the file info was updated accordingly.
511 EXPECT_TRUE(file.GetInfo(&info));
533 // Test we can retrieve the file's creation time through File::GetInfo().
541 File file(file_path, base::File::FLAG_CREATE | base::File::FLAG_READ | local
542 base::File::FLAG_WRITE);
543 EXPECT_TRUE(file.IsValid());
548 base::File::Info info;
549 EXPECT_TRUE(file.GetInfo(&info));
561 File file(file_path, local
562 base::File::FLAG_CREATE | base::File::FLAG_READ |
563 base::File::FLAG_WRITE);
564 EXPECT_TRUE(file.IsValid());
568 EXPECT_EQ(kDataSize, file.Write(0, kData, kDataSize));
570 EXPECT_EQ(0, file.Seek(base::File::FROM_BEGIN, 0));
574 EXPECT_EQ(first_chunk_size, file.ReadAtCurrentPos(buffer, first_chunk_size));
576 file.ReadAtCurrentPos(buffer + first_chunk_size,
586 File file(file_path, base::File::FLAG_CREATE | base::File::FLAG_READ | local
587 base::File::FLAG_WRITE);
588 EXPECT_TRUE(file.IsValid());
591 std::optional<size_t> result = file.Write(0, base::as_byte_span(data));
595 EXPECT_EQ(0, file.Seek(base::File::FROM_BEGIN, 0));
600 file.ReadAtCurrentPos(base::make_span(buffer).first(first_chunk_size));
605 file.ReadAtCurrentPos(base::make_span(buffer).subspan(first_chunk_size));
618 File file(file_path, local
619 base::File::FLAG_CREATE | base::File::FLAG_READ |
620 base::File::FLAG_WRITE);
621 EXPECT_TRUE(file.IsValid());
627 EXPECT_EQ(first_chunk_size, file.WriteAtCurrentPos(kData, first_chunk_size));
629 file.WriteAtCurrentPos(kData + first_chunk_size,
633 EXPECT_EQ(kDataSize, file.Read(0, buffer, kDataSize));
642 File file(file_path, base::File::FLAG_CREATE | base::File::FLAG_READ | local
643 base::File::FLAG_WRITE);
644 EXPECT_TRUE(file.IsValid());
649 file.WriteAtCurrentPos(base::as_byte_span(data).first(first_chunk_size));
653 result = file.WriteAtCurrentPos(
660 EXPECT_EQ(kDataSize, file.Read(0, buffer, kDataSize));
668 File file(file_path, local
669 base::File::FLAG_CREATE | base::File::FLAG_READ |
670 base::File::FLAG_WRITE);
671 ASSERT_TRUE(file.IsValid());
674 EXPECT_EQ(kOffset, file.Seek(base::File::FROM_BEGIN, kOffset));
675 EXPECT_EQ(2 * kOffset, file.Seek(base::File::FROM_CURRENT, kOffset));
676 EXPECT_EQ(kOffset, file.Seek(base::File::FROM_CURRENT, -kOffset));
677 EXPECT_TRUE(file.SetLength(kOffset * 2));
678 EXPECT_EQ(kOffset, file.Seek(base::File::FROM_END, -kOffset));
684 FilePath file_path = temp_dir.GetPath().AppendASCII("file");
685 File file(file_path,(base::File::FLAG_CREATE | local
686 base::File::FLAG_READ |
687 base::File::FLAG_WRITE));
688 ASSERT_TRUE(file.IsValid());
690 File file2(file.Duplicate());
697 ASSERT_EQ(0, file.Seek(base::File::FROM_CURRENT, 0));
698 ASSERT_EQ(0, file2.Seek(base::File::FROM_CURRENT, 0));
699 ASSERT_EQ(kDataLen, file.WriteAtCurrentPos(kData, kDataLen));
700 ASSERT_EQ(kDataLen, file.Seek(base::File::FROM_CURRENT, 0));
701 ASSERT_EQ(kDataLen, file2.Seek(base::File::FROM_CURRENT, 0));
702 file.Close();
711 FilePath file_path = temp_dir.GetPath().AppendASCII("file");
712 File file(file_path,(base::File::FLAG_CREATE | local
713 base::File::FLAG_READ |
714 base::File::FLAG_WRITE |
715 base::File::FLAG_DELETE_ON_CLOSE));
716 ASSERT_TRUE(file.IsValid());
717 File file2(file.Duplicate());
719 file.Close();
728 FilePath file_path = temp_dir.GetPath().AppendASCII("file");
730 File file(file_path, local
731 (base::File::FLAG_CREATE | base::File::FLAG_READ |
732 base::File::FLAG_WRITE | base::File::FLAG_DELETE_ON_CLOSE));
733 ASSERT_TRUE(file.IsValid());
735 EXPECT_EQ(perfetto::TracedValueToString(file),
749 FilePath file_path = temp_dir.GetPath().AppendASCII("file");
750 File file(file_path, local
751 (base::File::FLAG_CREATE | base::File::FLAG_READ |
752 base::File::FLAG_WRITE | base::File::FLAG_DELETE_ON_CLOSE));
753 ASSERT_TRUE(file.IsValid());
755 const char kData[] = "this file is sparse.";
759 // If the file fails to write, it is probably we are running out of disk space
760 // and the file system doesn't support sparse file.
761 if (file.Write(kLargeFileOffset - kDataLen - 1, kData, kDataLen) < 0)
764 ASSERT_EQ(kDataLen, file.Write(kLargeFileOffset + 1, kData, kDataLen));
769 uint32_t flags = base::File::FLAG_OPEN | base::File::FLAG_READ;
770 flags = base::File::AddFlagsForPassingToUntrustedProcess(flags);
771 EXPECT_EQ(flags, base::File::FLAG_OPEN | base::File::FLAG_READ);
774 uint32_t flags = base::File::FLAG_OPEN | base::File::FLAG_WRITE;
775 flags = base::File::AddFlagsForPassingToUntrustedProcess(flags);
776 EXPECT_EQ(flags, base::File::FLAG_OPEN | base::File::FLAG_WRITE |
777 base::File::FLAG_WIN_NO_EXECUTE);
789 base::File dir(
797 base::File::Info info;
807 FilePath file_path = temp_dir.GetPath().AppendASCII("file");
809 // Creating and closing a file with DELETE perms should do nothing special.
810 File file(file_path, local
811 (base::File::FLAG_CREATE | base::File::FLAG_READ |
812 base::File::FLAG_WRITE | base::File::FLAG_CAN_DELETE_ON_CLOSE));
813 ASSERT_TRUE(file.IsValid());
814 file.Close();
821 FilePath file_path = temp_dir.GetPath().AppendASCII("file");
823 // Creating a file with DELETE and then marking for delete on close should
825 File file(file_path, local
826 (base::File::FLAG_CREATE | base::File::FLAG_READ |
827 base::File::FLAG_WRITE | base::File::FLAG_CAN_DELETE_ON_CLOSE));
828 ASSERT_TRUE(file.IsValid());
829 ASSERT_TRUE(file.DeleteOnClose(true));
830 file.Close();
837 FilePath file_path = temp_dir.GetPath().AppendASCII("file");
839 // Creating a file with DELETE, marking it for delete, then clearing delete on
841 File file(file_path, local
842 (base::File::FLAG_CREATE | base::File::FLAG_READ |
843 base::File::FLAG_WRITE | base::File::FLAG_CAN_DELETE_ON_CLOSE));
844 ASSERT_TRUE(file.IsValid());
845 ASSERT_TRUE(file.DeleteOnClose(true));
846 ASSERT_TRUE(file.DeleteOnClose(false));
847 file.Close();
854 FilePath file_path = temp_dir.GetPath().AppendASCII("file");
857 File file(file_path, local
858 (base::File::FLAG_CREATE | base::File::FLAG_READ |
859 base::File::FLAG_WRITE | base::File::FLAG_DELETE_ON_CLOSE |
860 base::File::FLAG_WIN_SHARE_DELETE |
861 base::File::FLAG_CAN_DELETE_ON_CLOSE));
862 ASSERT_TRUE(file.IsValid());
868 file.DeleteOnClose(false);
869 file.Close();
876 FilePath file_path = temp_dir.GetPath().AppendASCII("file");
879 File file(file_path, local
880 (base::File::FLAG_CREATE | base::File::FLAG_READ |
881 base::File::FLAG_WRITE | base::File::FLAG_DELETE_ON_CLOSE |
882 base::File::FLAG_WIN_SHARE_DELETE |
883 base::File::FLAG_CAN_DELETE_ON_CLOSE));
884 ASSERT_TRUE(file.IsValid());
886 File file2(file_path,
887 (base::File::FLAG_OPEN | base::File::FLAG_READ |
888 base::File::FLAG_WRITE | base::File::FLAG_WIN_SHARE_DELETE |
889 base::File::FLAG_CAN_DELETE_ON_CLOSE));
895 file.Close();
902 FilePath file_path = temp_dir.GetPath().AppendASCII("file");
904 // It should not be possible to mark a file for deletion when it was not
906 File file(file_path, (base::File::FLAG_CREATE | base::File::FLAG_READ | local
907 base::File::FLAG_WRITE));
908 ASSERT_TRUE(file.IsValid());
909 ASSERT_FALSE(file.DeleteOnClose(true));
910 file.Close();
917 FilePath file_path = temp_dir.GetPath().AppendASCII("file");
921 File file(file_path, (base::File::FLAG_CREATE | base::File::FLAG_READ | local
922 base::File::FLAG_WRITE));
923 ASSERT_TRUE(file.IsValid());
924 File file2(
926 (base::File::FLAG_OPEN | base::File::FLAG_READ | base::File::FLAG_WRITE |
927 base::File::FLAG_DELETE_ON_CLOSE | base::File::FLAG_WIN_SHARE_DELETE));
930 file.Close();
937 FilePath file_path = temp_dir.GetPath().AppendASCII("file");
939 // Mapping a file into memory blocks DeleteOnClose.
940 File file(file_path, local
941 (base::File::FLAG_CREATE | base::File::FLAG_READ |
942 base::File::FLAG_WRITE | base::File::FLAG_CAN_DELETE_ON_CLOSE));
943 ASSERT_TRUE(file.IsValid());
944 ASSERT_EQ(5, file.WriteAtCurrentPos("12345", 5));
948 ASSERT_TRUE(mapping.Initialize(file.Duplicate()));
951 EXPECT_FALSE(file.DeleteOnClose(true));
954 file.Close();
962 FilePath file_path = temp_dir.GetPath().AppendASCII("file");
964 File file(file_path, base::File::FLAG_CREATE | base::File::FLAG_WRITE | local
965 base::File::FLAG_ASYNC);
966 File lying_file(file.TakePlatformFile(), false /* async */);
990 FilePath file_path = temp_dir.GetPath().AppendASCII("file");
992 File file(file_path,
993 base::File::FLAG_CREATE | base::File::FLAG_WIN_EXECUTE |
994 base::File::FLAG_READ | base::File::FLAG_WIN_NO_EXECUTE);