Если то, что Вы действительно делаете, управляет самим файлом CSV, ответ Nelson имеет смысл. Однако мое подозрение - то, что CSV является просто артефактом проблемы, которую Вы решаете. В C++, который, вероятно, означает, у Вас есть что-то вроде этого как Ваша модель данных:
struct Customer {
int id;
std::string first_name;
std::string last_name;
struct {
std::string street;
std::string unit;
} address;
char state[2];
int zip;
};
Таким образом, когда Вы работаете с набором данных, имеет смысл иметь std::vector<Customer>
или std::set<Customer>
.
, Имея это в виду, думают о Вашем CSV, обрабатывающем как две операции:
// if you wanted to go nuts, you could use a forward iterator concept for both of these
class CSVReader {
public:
CSVReader(const std::string &inputFile);
bool hasNextLine();
void readNextLine(std::vector<std::string> &fields);
private:
/* secrets */
};
class CSVWriter {
public:
CSVWriter(const std::string &outputFile);
void writeNextLine(const std::vector<std::string> &fields);
private:
/* more secrets */
};
void readCustomers(CSVReader &reader, std::vector<Customer> &customers);
void writeCustomers(CSVWriter &writer, const std::vector<Customer> &customers);
Read и пишут единственную строку за один раз, вместо того, чтобы сохранить полное представление в оперативной памяти самого файла. Существует несколько очевидных преимуществ:
<table>
. sizeof(Customer)
по сравнению с числом байтов в единственной строке). CSVReader
и CSVWriter
может быть снова использован как основание для модели в оперативной памяти (такой как Nelson) без потери производительности или функциональности. Обратное неверно. Я думаю, что вы используете ResourceManager неправильно. См. Это сообщение .
Также обратите внимание, когда вы открываете командную строку Visual Studio и запускаете resgen.exe, он сообщает, что он используется для преобразования файлов ресурсов из одного формата в другой (т.е. resx в ресурсы). Я думаю, вам нужно будет преобразовать ваш файл в ресурсы из resx, а затем загрузить его с помощью resourceManager.
Добавьте расширение .resx явно.
Вы также можете используйте автоматически сгенерированный класс и используйте его свойства, если это подходит для вашего проекта.
Я не уверен, какую версию .NET Framework вы используете.
Попробуйте изменить способ реализации ResourceManager.
ResourceManager rm =
new ResourceManager("Project.Resource",
System.Reflection.Assembly.Load("App_LocalResources"));
Это должно работать.
Это также отображается как статическое свойство автоматически сгенерированного класса .designer.cs конкретного менеджера восстановления.