The struct
merely defines a type. You'll need to lay out storage to hold the users. These patterns might give you some ideas: Are there well-solved and simple storage patterns for Solidity?
You can't pass an array of strings because strings are variable length and the array itself would be variable length - a variable length array of variable length elements. This is not (yet) supported by the interface.
In any case, you can work it out with functions designed to deal with one instance at a time.
For example (simplified) ...
struct UserStruct {
uint something;
string[] fileHashes;
boot isUser;
}
mapping(address => UserStructs) public userStructs;
function isUser(address user) public view returns(bool isIndeed) {
return(userStructs[user].isUser;
}
function newUser(address user, uint something) public onlyOwner returns(bool success) {
require(!isUser(user));
userStructs[user].something = something;
userStructs[user].isUser = true;
return true;
}
function appendUserFile(address user, string fileHash) public onlyOwner returns(bool success) {
require(isUser(user));
userStructs[user].files.push(fileHash);
return true;
}
... where user exists, add the new file hash to the array.
This is set up so we don't expect to populate everything in one move. Instead, we rely on the client to make multiple small transactions that address parts of the larger process.
Hope it helps.