2016-01-15 6 views
0

Я написал текстовый файл. Первым элементом каждой строки из этого текстового файла, который должен быть ключевым и остальным, являются значения. Мой текстовый файл выглядит this-Как сохранить все значения в папке с именем с именем C#

Flensburg;Nordertor;Naval Academy Mürwik;Flensburg Firth 
Kiel;Laboe Naval Memorial;Zoological Museum of Kiel University;Kieler Förde 
Lübeck;Holstentor;St. Mary's Church, Lübeck;Passat (ship);Burgtor;Lübeck Museum of Theatre Puppets;Trave 

Для моего проекта цели, мне нужно создать .json данные для каждого из значений и хранить эти VALES в ключевые folder.As имя Я очень новая трактовка этой ситуации я не получив правильную логику для этого. Тем не менее, я попытался найти способ, которым я могу создать папку с именем ключа и только одну вложенную папку. Но мне нужно создать папку значений внутри папки ключей. Как мне это сделать.

Мои POI класс, от которого я прочитал текстовый файл в качестве значения ключа

IS-
public class POI 
    { 
    Dictionary<string, List<string>> poi = new Dictionary<string, List<string>>(); 
    public bool ContainsKey(string key) { return this.poi.ContainsKey(key); } 
    public List<string> GetValue(string key) { return this.poi[key]; } 

    public void POIList() 
    { 
     foreach (string line in File.ReadLines("POIList.txt")) 
     { 
      string[] parts = line.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); 
      poi.Add(parts[0], new List<string>()); 
      poi[parts[0]] = new List<string>(parts.Skip(1)); 

     } 

    } 
} 

в Form1.cs

private void button1_Click(object sender, EventArgs e) 
    { 


      JSON_Output Json = new JSON_Output(); 

      Json.ToJsonForLocation(comboBox1.Text); 

    } 

также я установил selectedindexchange от combobox2

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     if (comboBox1.SelectedItem != null) 
     { 
      POI poi1 = new POI(); 
      poi1.POIList(); 
      string txt = comboBox1.SelectedItem.ToString(); 
      if (poi1.ContainsKey(txt)) 
      { 
       List<string> points = poi1.GetValue(txt); 
       comboBox2.Items.Clear(); 
       comboBox2.Items.AddRange(points.ToArray()); 

      } 
     } 
    } 

Теперь, когда файл json, созданный для болящего значения, -

 public void ToJsonForLocation(string name) 
     { 
     var startPath = Application.StartupPath; 
     string folderName = Path.Combine(startPath, "Text_ImageWithHash"); 
     string SubfolderName = Path.Combine(folderName, name); 
     //string folderName = Path.Combine(startPath, "Text_ImageWithHash"); 
     System.IO.Directory.CreateDirectory(SubfolderName); 
     string fileName = name + ".json"; 

     var path = Path.Combine(SubfolderName, fileName); 
     var Jpeg_File = new DirectoryInfo(startPath + @"\Image\" + name).GetFiles("*.jpg"); 

     POIData Poi=new POIData(); 
     Poi.Shorttext = File.ReadAllText(startPath + @"\Short Text\" + name + ".txt"); 
     Poi.GeoCoordinates=GeosFromString(startPath + @"\Latitude Longitude\" + name + ".txt"); 
     Poi.Images=new List<string> { Jpeg_File[0].Name}; 


     string json = JsonConvert.SerializeObject(Poi,Formatting.Indented); 
     File.WriteAllText(path , json); 
    } 

Это мой код при запуске программы. Window form picture

после нажатия кнопки 1 Папка Text_image_withHash создается в каталоге конфигурации.

Text_Image_withHash

Теперь, если я открываю папку я могу увидеть F находит следующие папки, которая является ключом значения из текстового файла Key Value folder

кнопки 2 После включения для выпадающего списка два генерируется папка значения, но не в ключевую папку. Но как обычно, в Text_Image_withHash.

key and values are generated in the same folder where

Но что я хочу сделать IS-enter image description here

+1

Немного непонятно, что вы просите, попробуйте уточнить свой вопрос. –

+0

Я должен второй, waht @die maus сказал. Ваш первый абзац не соответствует вашей второй или, по крайней мере, в моей голове, у них почти нет связи. Вы можете четко указать, в какой момент вашего письменного кода должна произойти конкретная вещь, используя комментарии. – Kevkong

+0

@ Kevkong. У меня есть текстовый файл. У меня есть название города и много интересных мест в текстовом файле. для моего проекта я должен получить данные json из web api для каждого интересного местоположения, которое будет содержать геолокацию, краткое описание и некоторую другую информацию. они будут сохранены в формате JSON как имя каждого имени значения. Эти файлы должны автоматически сохраняться в папке с именем ключа, которую я создаю по моему коду. Я не могу автоматически сохранять все значения в папке с именем ключа. В этом случае я не могу обрабатывать логику словаря. – Nowshin

ответ

0

Я только что получил мой ответ. Это решение вышеуказанного вопроса.

Для POI Класс:

public class POI 
{ 
    Dictionary<string, List<string>> poi = new Dictionary<string, List<string>>(); 
    public bool ContainsKey(string key) { return this.poi.ContainsKey(key); } 
    public List<string> GetValue(string key) { return this.poi[key]; } 

    public void POIList() 
    { 
     foreach (string line in File.ReadLines("POIList.txt")) 
     { 
      string[] parts = line.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); 

      if (parts.Length == 0) 
      { 
       // Empty line or similar. 
       continue; 
      } 

      string cityName = parts[0]; 

      poi.Add(cityName, new List<string>()); 

      // Add the points of interest to local. 
      var points = new List<string>(parts.Skip(1)); 
      poi[cityName] = points; 

      var startPath = Application.StartupPath; 
      string folderName = Path.Combine(startPath, "FinalJson"); 
      string cityDirectoryPath = Path.Combine(folderName, cityName); 

      Directory.CreateDirectory(cityDirectoryPath); 

       } 

    } 
} 

выход класса JSON

public void ToJsonForLocation(string CityName,string PoiName) 
    { 
     var startPath = Application.StartupPath; 
     string folderName = Path.Combine(startPath, "FinalJson"); 
     string SubfolderName = Path.Combine(folderName, CityName); 
     System.IO.Directory.CreateDirectory(SubfolderName); 
     string fileName = PoiName + ".json"; 

     var path = Path.Combine(SubfolderName, fileName); 
     var Jpeg_File = new DirectoryInfo(startPath + @"\Image\" + PoiName).GetFiles("*.jpg"); 

     POIData Poi=new POIData(); 
     Poi.Shorttext = File.ReadAllText(startPath + @"\Short Text\" + PoiName + ".txt"); 
     Poi.GeoCoordinates = GeosFromString(startPath + @"\Latitude Longitude\" + PoiName + ".txt"); 
     Poi.Images=new List<string> { Jpeg_File[0].Name}; 

     string json = JsonConvert.SerializeObject(Poi,Formatting.Indented); 
     File.WriteAllText(path,json); 
    } 

это создается папка и файл в этом imag1 ПУТЬ

image2 Окончательный файл JSon для всех значения the final json file

0

Для создания такой папки-структуры, просто используйте Еогеасп петлю. И String.Split.

Необходимые usings:

using System; 
using System.IO; 
using System.Text; 
using System.Linq; 

Пример:

// basePath can be anything 
var basePath = "C:\Something"; 
// assume "info" is your CSV. 
var infoParts = info.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries); 

if (infoParts.Length == 0) 
{ 
    return; 
} 

var rootPath = infoParts[0]; 

Directory.CreateDirectory(Path.Combine(basePath, rootPath)); 

foreach (var subPath in infoParts.Skip(1)) 
{ 
    Directory.CreateDirectory(Path.Combine(basePath, rootPath, subPath)); 
} 

Сохранение JSON-файлы в этих каталогах могли бы быть просто путем комбинирования путей аналогичным образом.

Я хотел бы также предложить некоторые дезинфекцию ваших путей (например, замена '/' и '\\' с '_' или '-'.

Пример реализации:

public void POIList() 
{ 
    foreach (string line in File.ReadLines("POIList.txt")) 
    { 
     string[] parts = line.Split(new[] { ';' }, 
      StringSplitOptions.RemoveEmptyEntries); 

     if (parts.Length == 0) 
     { 
      // Empty line or similar. 
      continue; 
     } 

     string cityName = parts[0]; 

     poi.Add(cityName, new List<string>()); 

     // Add the points of interest to local. 
     var points = new List<string>(parts.Skip(1)); 
     poi[cityName] = points; 

     // basePath will have to be retrieved somehow. It's up to you. 
     string cityDirectoryPath = Path.Combine(basePath, cityName)); 

     // Create a directory for the city. 
     Directory.CreateDirectory(cityDirectoryPath); 

     // Create sub-directories for points. 
     foreach (string point in points) 
     { 
      Directory.CreateDirectory(Path.Combine(
       cityDirectoryPath, point)); 
     } 
    } 
} 
+0

Не могли бы вы объяснить немного больше. Поскольку я очень новичок в этой ситуации. Я могу разместить свой код. Спасибо. – Nowshin

+0

Вы можете экстраполировать содержимое моего кода в свой конструктор 'POIList'. Однако, если бы я был вами, я бы оставил эту логику вне конструктора и вместо этого добавил метод LoadFromDisk. Изменить: в основном, вместо добавления элементов в словарь, просто используйте «CreateDirectory» (мой пример кода). –

+0

Я добавил серийное изображение, что хочу. Не могли бы вы проверить и объяснить немного больше. Потому что я не получаю ваш код – Nowshin

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