*第13回目 Cocoa、Windowsで設定保存(文字列編) [#zda681bb] NSUserDefaultsまたはCFPreference、レジストリでによる文字列の保存方法です。 下記はそれぞれについてのサンプルです。 **NSUserDefaults [#q4b92b0e] MacOSXのCocoaでNSUserDefaultsを使って文字列を設定保存する。 ***文字列を書き込む [#x7767856] #import <Cocoa/Cocoa.h> char* string ="kuran_kuran"; NSString *nsstring = [NSString stringWithCString:string encoding:NSUTF8StringEncoding]; NSUserDefaults* userdefaults = [NSUserDefaults standardUserDefaults]; [userdefaults setObject:nsstring forKey:@"name"]; [userdefaults synchronize]; ***文字列を読み出す [#a8fac4f7] #import <Cocoa/Cocoa.h> NSString *nsstring; NSUserDefaults* userdefaults = [NSUserDefaults standardUserDefaults]; nsstring = [userdefaults stringForKey:@"name"]; char* string = [nsstring UTF8String]; **CFPreference [#vf350ff1] MacOSXでCFPreferenceを使って文字列を設定保存する。 ***文字列を書き込む [#re41ec33] #include <CoreFoundation/CFPreferences.h> CFStringRef application_name; CFStringRef name_string; CFStringRef string_string; name_string = CFStringCreateWithCString(kCFAllocatorDefault, "name", kCFStringEncodingUTF8); if(name_string) { string_string = CFStringCreateWithCString(kCFAllocatorDefault, "kuran_kuran", kCFStringEncodingUTF8); if(string_string) { application_name = CFSTR("application_name"); // kCFPreferencesCurrentApplicationを設定するとデフォルトの名前が適用される CFPreferencesSetAppValue(name_string, string_string, application_name); CFPreferencesSetAppValue(CFSTR("score"), value, application_name); CFRelease(name_string); CFRelease(string_string); CFPreferencesAppSynchronize(application_name); } else { CFRelease(name_string); } } ***文字列を読み出す [#ba98384e] #include <CoreFoundation/CFPreferences.h> CFStringRef application_name; CFStringRef name_string; CFStringRef string_string; char name[100]; application_name = CFSTR("application_name"); // kCFPreferencesCurrentApplicationを設定するとデフォルトの名前が適用される name_string = CFStringCreateWithCString(kCFAllocatorDefault, name, kCFStringEncodingUTF8); if(name_string) { string_string = static_cast<CFStringRef>(CFPreferencesCopyAppValue(name_string, application_name)); if(string_string) { CFStringGetCString(string_string, name, static_cast<CFIndex>(100), kCFStringEncodingASCII); } else { CFRelease(name_string); } } **レジストリ [#ob58ee2d] Windowsでレジストリに文字列を設定保存する。 ***文字列を書き込む [#v19da719] #include <tchar.h> #include <windows.h> HKEY handle; DWORD result; PCTSTR name = _T("kuran_kuran"); result = RegCreateKeyEx(HKEY_CURRENT_USER, _T("SOFTWARE\\REGISTRYTEST"), 0, _T(""), REG_OPTION_NON_VOLATILE, KEY_CREATE_SUB_KEY | KEY_WRITE, NULL, &handle, NULL); if(result == ERROR_SUCCESS) { DWORD length; #ifdef _UNICODE length = static_cast<DWORD>(_tcsclen(name) * 2 + 2); #else length = static_cast<DWORD>(strlen(name) + 1); #endif RegSetValueEx(handle, _T("name"), 0, REG_SZ, reinterpret_cast<CONST BYTE*>(name), length); RegCloseKey(handle); } ***文字列を読み出す [#i3671172] #include <tchar.h> #include <windows.h> HKEY handle; DWORD result; TCHAR name[100]; result = RegOpenKeyEx(HKEY_CURRENT_USER, _T("SOFTWARE\\REGISTRYTEST"), 0, KEY_READ, &handle); if(result == ERROR_SUCCESS) { DWORD type; DWORD size; result = RegQueryValueEx(handle, _T("name"), NULL, &type, NULL, &size); if((result == ERROR_SUCCESS) && (type == REG_SZ) && (size <= 100)) { RegQueryValueEx(handle, _T("name"), NULL, &type, reinterpret_cast<LPBYTE>(&name), &size); } RegCloseKey(handle); } #author("2018-06-18T16:07:37+09:00","default:kuran","kuran") [[前に戻る>プログラミング]]