2016-12-22 7 views
2

Я пытаюсь сохранить путь к файлу в файле ini, который содержит папку на арабском языке. т.е.C# WritePrivateProfileString() значение, отличное от английского языка

D: \ ملف جديد \ Проверка папки

Но после использования WritePrivateProfileString() записать его в settings.ini. Он показывает путь следующим образом:

D: \ ??? ???? \ Папка для проверки

Что мне делать, чтобы правильно сохранить путь?

Edit:

Ниже приводится код, я использую для записи INI-файлов

[DllImport("kernel32")] 

private static extern long WritePrivateProfileString(string section, string key, string val, string filePath); 
+1

Какая кодировка является параметром settings.ini? Это unicode? – Sefe

+0

Я думаю, что это unicode @Sefe – FaizanRabbani

+0

Используете ли вы Win32 API? Можете ли вы добавить код в свой вопрос? – gsharp

ответ

1

Вы можете попробовать my INI library, я создал его, чтобы иметь более удобный (и более понятный/интуитивный) API, чем те API WritePrivateProfile.
Вот пример того, как вы можете использовать его:

// Your inputs. 
string section, key, val, filePath; 

var iniOptions = new IniOptions(); 
iniOptions.Encoding = Encoding.UTF8; 

var ini = new IniFile(iniOptions); 
ini.Load(filePath); 

IniSection iniSection = ini.Sections[section]; 
IniKey iniKey = iniSection.Keys[key]; 
iniKey.Value = val; 

ini.Save(filePath); 

Я надеюсь, что это помогает.

+0

я был в состоянии записать значение на арабском языке с помощью: Encoding.Default и читать его с помощью: Encoding.UTF8 – FaizanRabbani

+0

Вы действительно должны использовать ту же кодировку для чтения и записи. Также я бы предложил вам пересмотреть использование Encoding.Default, потому что на разных машинах он может иметь другое значение.Также см. Замечания свойства Encoding.Default: https://msdn.microsoft.com/en-us/library/system.text.encoding.default(v=vs.110).aspx –

+0

Я прочитал замечания, но когда Я пытаюсь написать язык (кроме английского), используя UTF8, он хранит информацию в других символах. – FaizanRabbani

3

Вы должны использовать System.Text.Encoding.GetEncoding("Arabic") для использования арабского текста на пути

Как, например, если вы хотите прочитать и записать в файл, кроме

using (var reader = new System.IO.StreamReader("YourFilePath", System.Text.Encoding.GetEncoding("Arabic"))) 
{ 
} 

using (var writer = new System.IO.StreamWriter("YourFilePath", true, System.Text.Encoding.GetEncoding("Arabic"))) 
{ 
} 
+0

Я думаю, что это должно быть '.... StreamWriter (" D: \ SomePath \ settings.ini ", ...)', а затем записать в него арабскую строку. –

+0

Спасибо за ловушку @PeterB, но мы уверены, что я сделал это 'YourFilePath': D :) –

+0

Но это будет ограничивать его только арабским языком? @MohitShrivastava – FaizanRabbani

Смежные вопросы