diff --git a/interfaces/kits/ndk/fileuri/include/oh_file_uri.h b/interfaces/kits/ndk/fileuri/include/oh_file_uri.h index b1e3177c836f0d865c1bf309445629e0bdf1032c..633f00817cd74f1d6e176fe75aa04ef044ad1534 100644 --- a/interfaces/kits/ndk/fileuri/include/oh_file_uri.h +++ b/interfaces/kits/ndk/fileuri/include/oh_file_uri.h @@ -77,6 +77,18 @@ FileManagement_ErrCode OH_FileUri_GetFullDirectoryUri(const char *uri, unsigned * @since 12 */ bool OH_FileUri_IsValidUri(const char *uri, unsigned int length); + +/** +* @brief Gets the fileName From uri. +* +* @param uri Input a pointer to the uri string. +* @param length The length of the input uri. +* @param result Output a pointer to a FileName string or FolderName string. Please use free() to clear the resource. +* @return Returns the status code of the execution. +* @syscap SystemCapability.FileManagement.AppFileService +* @since 13 + */ +FileManagement_ErrCode OH_FileUri_GetFileName(const char *uri, unsigned int length, char **result); #ifdef __cplusplus }; #endif diff --git a/interfaces/kits/ndk/fileuri/liboh_file_uir.ndk.json b/interfaces/kits/ndk/fileuri/liboh_file_uir.ndk.json index 776c160a844e043392cb6a6d33d84b72bccfcac1..d17efcd7a88cd6634ea7d1386c839c25529a977c 100644 --- a/interfaces/kits/ndk/fileuri/liboh_file_uir.ndk.json +++ b/interfaces/kits/ndk/fileuri/liboh_file_uir.ndk.json @@ -13,5 +13,9 @@ { "first_introduced": "12", "name":"OH_FileUri_IsValidUri" + }, + { + "first_introduced": "13", + "name":"OH_FileUri_GetFileName" } ] \ No newline at end of file diff --git a/interfaces/kits/ndk/fileuri/src/oh_file_uri.cpp b/interfaces/kits/ndk/fileuri/src/oh_file_uri.cpp index 213aba11c4241c65de3d7f5c2c4b37854daf097f..0686bb95df09f9a9ef3ba5d97b9ac888a67479d5 100644 --- a/interfaces/kits/ndk/fileuri/src/oh_file_uri.cpp +++ b/interfaces/kits/ndk/fileuri/src/oh_file_uri.cpp @@ -90,3 +90,18 @@ bool OH_FileUri_IsValidUri(const char *uri, unsigned int length) OHOS::AppFileService::ModuleFileUri::FileUri fileUri(uriStr); return fileUri.CheckUriFormat(uriStr); } + +FileManagement_ErrCode OH_FileUri_GetFileName(const char *uri, unsigned int length, char **result) +{ + if (uri == nullptr || strlen(uri) != length || result == nullptr) { + return ERR_PARAMS; + } + std::string uriStr(uri, length); + OHOS::AppFileService::ModuleFileUri::FileUri fileUri(uriStr); + std::string resultStr = fileUri.GetName(); + size_t count = resultStr.length(); + if (count == 0) { + return ERR_PARAMS; + } + return GetValue(resultStr, result); +} diff --git a/test/unittest/file_uri_ndk_test/file_uri_ndk_test.cpp b/test/unittest/file_uri_ndk_test/file_uri_ndk_test.cpp index 307dfb9f7127aea1c8c1c382686238355bd29106..d34f45de82877f48d6d839a23e158989317aa5f1 100644 --- a/test/unittest/file_uri_ndk_test/file_uri_ndk_test.cpp +++ b/test/unittest/file_uri_ndk_test/file_uri_ndk_test.cpp @@ -319,4 +319,91 @@ HWTEST_F(NDKFileUriTest, is_valid_uri_test_002, TestSize.Level1) GTEST_LOG_(INFO) << "is_valid_uri_test_002"; } +/** + * @tc.number: get_filename_test_001 + * @tc.name: Test function of OH_FileUri_GetFileName() interface for unknown path + * @tc.desc: Set uri and get filename + * @tc.type: FUNC + */ +HWTEST_F(NDKFileUriTest, get_fileUri_filename_test_001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "get_fileUri_filename_test_001 start"; + const char fileUri[] = "file://docs/storage/Users/currentUser/Documents/GetFullDirectoryUri001.txt"; + const char resultUri[] = "GetFullDirectoryUri001.txt"; + char *result = nullptr; + unsigned int length = strlen(fileUri); + FileManagement_ErrCode ret = OH_FileUri_GetFileName(fileUri, length, &result); + EXPECT_EQ(ret, ERR_OK); + if (result != nullptr) { + GTEST_LOG_(INFO) << result; + EXPECT_EQ(strcmp(result, resultUri), 0); + } + FreeResult(&result); + GTEST_LOG_(INFO) << "get_fileUri_filename_test_001 end"; +} + +/** + * @tc.number: get_filename_test_002 + * @tc.name: Test function of OH_FileUri_GetFileName() interface for unknown path + * @tc.desc: Set uri and get filename + * @tc.type: FUNC + */ +HWTEST_F(NDKFileUriTest, get_fileUri_filename_test_002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "get_fileUri_filename_test_002 start"; + const char fileUri[] = "file://docs/storage/Users/currentUser/Documents/dirName"; + const char resultUri[] = "dirName"; + char *result = nullptr; + unsigned int length = strlen(fileUri); + FileManagement_ErrCode ret = OH_FileUri_GetFileName(fileUri, length, &result); + EXPECT_EQ(ret, ERR_OK); + if (result != nullptr) { + GTEST_LOG_(INFO) << result; + EXPECT_EQ(strcmp(result, resultUri), 0); + } + FreeResult(&result); + GTEST_LOG_(INFO) << "get_fileUri_filename_test_002 end"; +} + +/** + * @tc.number: get_filename_test_003 + * @tc.name: Test function of OH_FileUri_GetFileName() interface for unknown path + * @tc.desc: Set uri and get filename + * @tc.type: FUNC + */ +HWTEST_F(NDKFileUriTest, get_fileUri_filename_test_003, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "get_fileUri_filename_test_003 start"; + const char fileUri[] = "file://com.example.filesharea/data/test/file_uri_test.txt"; + char *result = nullptr; + unsigned int length = strlen(fileUri); + FileManagement_ErrCode ret = OH_FileUri_GetFileName(nullptr, length, &result); + EXPECT_EQ(ret, ERR_PARAMS); + + ret = OH_FileUri_GetFileName(fileUri, length - 1, &result); + EXPECT_EQ(ret, ERR_PARAMS); + + ret = OH_FileUri_GetFileName(fileUri, length, nullptr); + EXPECT_EQ(ret, ERR_PARAMS); + FreeResult(&result); + GTEST_LOG_(INFO) << "get_fileUri_filename_test_003 end"; +} + +/** + * @tc.number: get_filename_test_004 + * @tc.name: Test function of OH_FileUri_GetFileName() interface for unknown path + * @tc.desc: Set uri and get filename + * @tc.type: FUNC + */ +HWTEST_F(NDKFileUriTest, get_fileUri_filename_test_004, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "get_fileUri_filename_test_004 start"; + const char fileUri[] = "file://docs/storage/Users/currentUser/Documents/dirName/"; + char *result = nullptr; + unsigned int length = strlen(fileUri); + FileManagement_ErrCode ret = OH_FileUri_GetFileName(fileUri, length, &result); + EXPECT_EQ(ret, ERR_PARAMS); + GTEST_LOG_(INFO) << "get_fileUri_filename_test_004 end"; +} + } // namespace OHOS::AppFileService::ModuleFileUri \ No newline at end of file