我是Objective-C的新手。现在,我正在处理文件。我的问题是...... 如何在特定文件夹中搜索文件?
让我们说,我得到一个输入字符串“input”。现在我要做的就是从特定路径搜索并读取文件“input.txt”,也许是“user / desktop / files”文件夹。我该怎么做呢? 我知道使用NSFileHandle通过指定完整路径来读取文件。但我不知道该怎么做。 请帮帮我。
谢谢
答案 0 :(得分:3)
您应该考虑使用一些NSString方法。
// path contains the path to the folder you want to find the file in.
// create the full file name
NSString* shortPath = [@"input" stringByAppendingPathExtension: @"txt"];
NSString* fullPath = [path stringByAppendingPathComponent: shortFileName];
// open the file. we convert to an NSURL so we can use the better open method
NSURL* fileURL = [NSURL fileURLWithPath: fullPath];
NSError* error = nil;
NSFileHandle *file=[NSFileHandle fileHandleForReadingFromURL: fileURL
error: &error];
if (file == nil)
{
// error contains info on what went wrong
}
else
{
// do what you need
}
答案 1 :(得分:3)
通常,要使用路径,可以使用NSPathUtilities.h中定义的以下方法(而不是NSString.h本身):
@interface NSString (NSStringPathExtensions)
+ (NSString *)pathWithComponents:(NSArray *)components;
- (NSArray *)pathComponents;
- (BOOL)isAbsolutePath;
- (NSString *)lastPathComponent; // frequently-used
- (NSString *)stringByDeletingLastPathComponent; // frequently-used
- (NSString *)stringByAppendingPathComponent:(NSString *)str; // frequently-used
- (NSString *)pathExtension; // frequently-used
- (NSString *)stringByDeletingPathExtension; // frequently-used
- (NSString *)stringByAppendingPathExtension:(NSString *)str; // frequently-used
- (NSString *)stringByAbbreviatingWithTildeInPath;
- (NSString *)stringByExpandingTildeInPath;
- (NSString *)stringByStandardizingPath;
- (NSString *)stringByResolvingSymlinksInPath;
- (NSArray *)stringsByAppendingPaths:(NSArray *)paths;
- (NSUInteger)completePathIntoString:(NSString **)outputName
caseSensitive:(BOOL)flag matchesIntoArray:(NSArray **)outputArray
filterTypes:(NSArray *)filterTypes;
- (__strong const char *)fileSystemRepresentation;
- (BOOL)getFileSystemRepresentation:(char *)cname maxLength:(NSUInteger)max;
@end
所以,你会做类似的事情:
NSString *fullpath = [[path stringByAppendingPathComponent:input]
stringByAppendingPathExtension:@"txt"];
这些方法负责为您处理路径分隔符。
如果已知文件是文本文件,则可以在NSString中使用以下方法:
- (id)initWithContentsOfURL:(NSURL *)url encoding:(NSStringEncoding)enc
error:(NSError **)error;
- (id)initWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc
error:(NSError **)error;
+ (id)stringWithContentsOfURL:(NSURL *)url encoding:(NSStringEncoding)enc
error:(NSError **)error;
+ (id)stringWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc
error:(NSError **)error;
/* These try to determine the encoding, and return the encoding which was used.
Note that these methods might get "smarter" in subsequent releases of the
system, and use additional techniques for recognizing encodings. If nil
is returned, the optional error return indicates problem that was
encountered (for instance, file system or encoding errors). */
- (id)initWithContentsOfURL:(NSURL *)url usedEncoding:(NSStringEncoding *)enc
error:(NSError **)error;
- (id)initWithContentsOfFile:(NSString *)path usedEncoding:(NSStringEncoding *)enc
error:(NSError **)error;
+ (id)stringWithContentsOfURL:(NSURL *)url usedEncoding:(NSStringEncoding *)enc
error:(NSError **)error;
+ (id)stringWithContentsOfFile:(NSString *)path usedEncoding:(NSStringEncoding *)enc
error:(NSError **)error;
/* Write to specified url or path using the specified encoding.
The optional error return is to indicate file system or encoding errors.
*/
- (BOOL)writeToURL:(NSURL *)url atomically:(BOOL)useAuxiliaryFile
encoding:(NSStringEncoding)enc error:(NSError **)error;
- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile
encoding:(NSStringEncoding)enc error:(NSError **)error;
后者可用于写入文件。
你会发现Cocoa中的许多类都有从文件或URL本身读入的方法。例如,NSImage
有一个从文件中读取的方法。您通常可以考虑比文件句柄更高级别的项目(尽管它们确实有它们的位置)。对于通用数据,始终有NSData
也可以从文件读入。
要以编程方式获取文件夹中项目的列表,您可以使用NSFileManager
,然后使用NSString
的方法为各个项目构建路径。
哦,如果你还不知道的话,另一个提示。如果您在Xcode源代码窗口中,请按住Command键并双击任何类或方法名称或数据类型以打开该对象的头文件。例如,Command-双击NSString打开NSString.h。按住Command-Option并双击以打开Xcode帮助窗口并搜索突出显示的术语。
答案 2 :(得分:0)
好的,我刚刚在这里做了一些NSString ...
NSString *input=[TextInput stringValue];
NSString *path=@"/Users/mith/Desktop/files/";
NSString *fullpath=[NSString stringWithFormat:@"%@%@.txt",path,input];
NSFileHandle *file=[NSFileHandle fileHandleForReadingAtPath:fullpath];`
好的,这对我很有用......但是有更好的方法吗?
由于