2016-06-03 2 views
0

У меня есть список.Сочетание текстовых файлов

List<string> slots = HexStringToGenerateFiles(weaponStorageEntity.Slot); 

Я извлекаю список, используя цикл foreach, и сделал некоторое преобразование в одно и то же время.

string slotnumber = ""; 
string ibuttonslot = ""; 
foreach (string slot in slots) 
{ 
slotnumber += slot; 
ibuttonslot = ByteOperation.ReverseString((Convert.ToString(1 << ((Int32.Parse(slotnumber)) - 1), 2).PadLeft(16, '0'))); 
} 

Затем сохраните вывод как имя текстового файла.

CreateFile(String.Format("{0}\\B_{1:X16}.TXT", 
            userDir, 
            ibuttonslot, 
            )); 

Если у меня есть 3 слота, то на моем выходе будет 3 текстовых файла. Тем не менее, я бы хотел, чтобы он объединил его в один текстовый файл. Мой вывод - это то, что показано ниже.

B_10000000.TXT

B_01000000.TXT

B_00100000.TXT

Мой желаемый выход

B_11100000.TXT

+0

Так что проблема в сливающихся файла или именования файла? или оба? –

ответ

1

Если у вас есть слоты пронумерованные так же, как «1», «2», «3», .. . и вы хотите, чтобы произвести имя файла, который будет представлять «1» в соответствующий слот - так что для «1 3» было бы 10100000 ... то вы можете использовать что-то вроде этого:

var slots = new[] { "1" }; 
var number = 0; 
foreach (var s in slots) 
{ 
    int slotNumber; 
    if (!Int32.TryParse(s, out slotNumber)) continue; 

    var slot = (int)Math.Pow(2, slotNumber - 1); 
    number |= slot; 
} 

var fileName = Convert.ToString(number, 2).PadLeft(16, '0'); 
Console.WriteLine(fileName); //output is 0000000000000101 

и затем верните эту строку (в вашем коде это ByteOperation.ReverseString).

+0

это именно то, что мне нужно. Благодарю. – active92

+0

Я только узнал, что если ни один из слотов не был выбран. значение, когда var slot = new [] {""}; будет ошибка. – active92

+1

Обновлен ответ с помощью TryParse – JleruOHeP

0

Если вы хотите совместить текст и файловые, то вы можете использовать File.ReadAllLines(string) метод и комбинировать вывод, как

 List<string> contents = System.IO.File.ReadAllLines(firstfile).ToList(); 
     contents.AddRange(System.IO.File.ReadAllLines(secondfile)); 
+0

Но в вашем комментарии вы сказали содержание ... ?? – Rahul

0

Вы можете попробовать это для сочетающих имен:

string in1 = "B_10000000.TXT"; 
string in2 = "B_01000000.TXT"; 
string in3 = "B_00100000.TXT"; 
char[] charsInName = in1.ToCharArray(); 
for (int i = 0; i < charsInName.Length-1; i++) 
{ 
    if (charsInName[i] != in2[i] && charsInName[i] != in3[i]) 
     charsInName[i] = charsInName[i]; 
    else if (charsInName[i] != in2[i]) 
     charsInName[i] = in2[i]; 
    else if (charsInName[i] != in3[i]) 
     charsInName[i] = in3[i]; 
} 
string outPutName = String.Join("", charsInName);// will be B_11100000.TXT 

Или можно использовать LINQ:

var result = in1.Select(
    (x, y) => x != in2[y] && x != in3[y] ? x : 
    x != in2[y] ? in2[y] : 
    x != in3[y] ? in3[y] : x); 
string outPutName = String.Join("", result); 
Смежные вопросы